我有一个具有unique_together约束的模型
class ExampleModel(models.Model):
id = models.AutoField(primary_key=True)
cmp = models.ForeignKey('Titles',
on_delete=models.PROTECT)
env = models.CharField(max_length=32)
class Meta:
unique_together = (
'cmp ',
'env ',
)
具有以上字段的序列化器:
class ExampleModelSerializer(serializers.ModelSerializer):
class Meta:
model = ExampleModel
fields = ('id', 'cmp ', 'env')
在视图集中,以下销毁方法:
def destroy(self, request, pk):
serializer = self.get_serializer(data=request.query_params)
serializer.is_valid(raise_exception=True)
instance = self.get_object()
self.perform_destroy(instance)
在线serializer.is_valid()中断并出现以下错误:
{"non_field_errors":["The fields cmp, envmust make a unique set."]}
任何想法为什么会发生以及解决它的正确方法是什么
答案 0 :(得分:0)
使用库存DRF销毁物品的正确方法是提供唯一的ID(通常是pk)并销毁它。 通过在没有实例的情况下调用序列化程序,您就好像在创建一个新实例一样。这就是DRF不允许您通过验证步骤的原因。
答案 1 :(得分:0)
destroy动作不需要任何数据,因此您不应该提供或尝试序列化请求正文。它只是从URL获取ID,因为它是一个详细信息终结点,获取对象并删除。您可能需要先了解一下destroy的原始实现