Django “德扬戈投掷”;类型不正确。应为URL字符串“;关于API调用

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

我不明白为什么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://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?