【发布时间】:2018-11-09 09:30:41
【问题描述】:
我有以下序列化程序定义:
class TestSerializer(serializers.ModelSerializer):
contexts = serializers.SerializerMethodField()
class Meta:
model = Test
fields = (
"id",
"contexts"
)
def get_contexts(self, obj):
return ...
def create(self, data):
print('CREATE')
print(data)
return super().create(data)
def update(self, instance, validated_data):
print('UPDATE')
print(validated_data)
return super().update(instance, validated_data)
以及在视图集中的用法
serializer_class = TestSerializer
queryset = Test.objects.all()
请注意,contexts 字段不是数据库字段。使用 GET 访问端点时,我使用
{
"id": 1,
"contexts": [{...}]
}
但是,当将相同的数据作为 POST 发回时,就会出现两个问题。第一个序列化程序似乎无法关联正确的数据集,因为我总是以导致错误的create 方法结束
duplicate key value violates unique constraint
在创建方法中打印data 时,上下文根本不存在。
【问题讨论】:
-
鉴于您使用的是
ModelViewSet,POST请求确实会尝试使用1创建一个新条目作为id。如果 ID 为1的条目已存在,则这是不可能的。要更新,您需要向详细路线发送PATCH请求。/api/test/1/
标签: python django rest django-rest-framework serialization