[英]invalid literal for int() with base ten in listAPI view django rest framework
[英]Django Rest Framework: “Invalid literal for in()” with a CharField
我正在尝试为用户收藏夹创建一个API端点。 但是,我现在遇到了一个我无法解决的问题。
POST到端点时,我得到了一个无效的CharField文字错误。
ValueError at /api/users/2/favourites/
invalid literal for int() with base 10: 'track'
这是序列化器:
class FavouriteSerializer(serializers.ModelSerializer):
user = UserSerializer(
read_only=True,
default=CreateOnlyDefault(serializers.CurrentUserDefault())
)
type = serializers.CharField(source='content_type')
object = FavouriteObjectRelatedField(read_only=True)
id = serializers.IntegerField(source='object_id')
def create(self, validated_data):
raise TypeError(validated_data)
class Meta:
model = Favourites
fields = ('type', 'object', 'user', 'type', 'id')
我通过在序列化器的to_internal_value()
方法中引发异常来验证错误是由序列化器而不是视图引起的。 查看后会触发。
我已经检查了数据库,以确认没有数据错误。
可能导致错误(不确定如何)的一件事是我正在使用内容类型框架 。
因此,这是模型:
class Favourites(models.Model):
objects = FavouritesManager()
user = models.ForeignKey('Profile.User', on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType)
object_id = models.IntegerField()
object = GenericForeignKey('content_type', 'object_id')
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = _('favorite')
verbose_name_plural = _('favorites')
unique_together = (('user', 'content_type', 'object_id'),)
错误发生在type
字段上。 如果将字段更改为IntegerField
并为数据使用整数,则不会出现此错误。 奇怪的是,如果我将id
字段变成CharField
,也不会收到错误消息。 因此,我相信这与ContentType
的外键有关,但不知道如何做。
您可以在此处查看完整的堆栈跟踪。
在这里,您有一个CharField
:
type = serializers.CharField(source='content_type')
当content_type
是ContentType
的ForeignKey
,其主键是整数:
content_type = models.ForeignKey(ContentType)
如果POST type=track
,Django将尝试将'track'
为整数,这显然会失败。
您的类型应为:
type = serializers.IntegerField(source='content_type')
而且,如果ContentType
行的id
为type=5
,则不应该POST type=track
,而应该type=track
5
。
在外壳上尝试此操作以获取您的内容类型的ID:
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().values_list()
[
(1, 'auth', 'user'),
(2, 'auth', 'permission'),
(3, 'auth', 'group'),
(4, 'contenttypes', 'contenttype'),
(5, 'sessions', 'session'),
...
(8, 'yourapp', 'yourmodel'),
...
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.