当我尝试更新我的模型时,我的序列化程序不包含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应该默认使用它。
答案 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)