Django “德扬戈投掷”;类型不正确。应为URL字符串“;关于API调用
我不明白为什么Django REST框架会抱怨它需要一个字符串,而它应该需要一个int!我得到的错误是:Django “德扬戈投掷”;类型不正确。应为URL字符串“;关于API调用,django,django-rest-framework,Django,Django Rest Framework,我不明白为什么Django REST框架会抱怨它需要一个字符串,而它应该需要一个int!我得到的错误是: {“\u body”:“{”who\u saw\”:[\“类型不正确。预期的URL字符串,接收到的int.\”],\“item\u seen\”:[\“类型不正确。预期的URL字符串,接收到的int.\”],“status”:400,“statusText:“Ok”,“headers:{”内容类型:[“application/json;q=0.8”],“type”:2,“URL:”http
{“\u body”:“{”who\u saw\”:[\“类型不正确。预期的URL字符串,接收到的int.\”],\“item\u seen\”:[\“类型不正确。预期的URL字符串,接收到的int.\”],“status”:400,“statusText:“Ok”,“headers:{”内容类型:[“application/json;q=0.8”],“type”:2,“URL:”http://127.0.0.1:8000/api/seen/"}
问题是您使用的是serializers.HyperlinkedModelSerializer,您应该使用serializers.ModelSerializer或将要发送的ID的链接作为int发送。除了wm3ndez的答案外,另一个解决方案是将序列化程序中的此字段定义为与用户模型上的“ID”字段相关的SlugRelatedField:
class SeenSerializer(serializers.HyperlinkedModelSerializer):
username = serializers.SerializerMethodField()
who_saw = serializers.SlugRelatedField(
queryset= User.objects.all(),
slug_field='id'
)
def get_username(self, obj):
value = str(obj.who_saw)
return value
def get_keywords(self, obj):
value = str(obj.keywords)
return value
class Meta:
model = Seen
fields = ('who_saw', 'item_seen', 'liked', 'date_seen', 'username')
此字段将覆盖HyperlinkedModelSerializer的默认行为,您将能够传递用户id(作为int),而不是向用户发送链接。我遇到了相同的问题。在我的例子中,我必须将关系添加到序列化程序中 我有这些模型:
班级组织(models.Model):
...
班级负责人(models.Model):
...
organization=models.ForeignKey(organization,on_delete=models.CASCADE,related_name=“agency”,null=True,blank=True,)
我需要更改此序列化程序:
class PersonSerializer(serializers.HyperlinkedModelSerializer,WritableNestedModelSerializer):
organization=OrganizationSerializer(many=False,required=False)#添加此
类元:
模特=人
字段='\uuuu所有\uuuu'
是!就这样!现在效果很好。为什么angularjs
tag?