Django Rest Framework ModelSerializer pk字段在更新

时间:2016-10-23 20:07:28

标签: serialization django-rest-framework primary-key

当我尝试更新我的模型时,我的序列化程序不包含pk字段。 我的序列化器看起来像这样:

class BookSerializer(serializers.ModelSerializer):
    pages = PageSerializer(many=True)

    class Meta:
        model = Book
        fields = ('pk', 'tite', 'pages')

当我从http.get调用中获取我的书时,数据包含pk键。但是当我使用http.put方法发布此数据时,我的序列化程序中validated_data中捕获的数据不包含pk字段。我必须在每个序列化器上定义这个pk吗?我虽然DRF 3应该默认使用它。

3 个答案:

答案 0 :(得分:1)

您还不想更新pk。默认情况下,它是只读的,因此您无法进行写入操作。 如果您真的需要它,请将其标记为可读写。

答案 1 :(得分:0)

你可以在self.instance中找到pk,也可以找到id和我们正在更新的对象的所有其他值

if self.instance:
   pk = self.instance.pk

答案 2 :(得分:0)

显式声明序列化器中的字段:

    id = serializers.IntegerField()

或者如果这是一个嵌套的序列化程序,用户 required=False 以便您也可以添加新对象:

    id = serializers.IntegerField(required=False)