我已将名为cus_id
的字段设置为不是AutoField
的主键字段。
我需要更改pk alon,以使其他相同ID的相关数据应位于同一索引中,而不是单独更改pk。
如果我通过PATCH
/ PUT
发出请求,它将创建新记录而不是更新PK
所以我经历了django docs,
主键字段是只读的。如果更改现有对象上的主键的值然后保存,则将在旧对象的旁边创建一个新对象。
但是我正在使用Django Rest Framework来生成API。
我可以通过重写DRF GET方法来实现。但是我想做的事不会被覆盖。
是否有任何django
方式可以使用PK
更新DRF
而又不覆盖get方法?
我的观点:
class ModelViewSet(ModelCustomViewSet):
model = Model
queryset = Model.objects.all()
serializer_class = ModelSerializer
filter_fields = model._meta.get_all_field_names()
filter_backends = [DjangoFilterBackendExt, ]
序列化器:
class ModelSerializer(RequiredMixin):
class Meta:
model = Model
update_lookup_field = "cus_id"
答案 0 :(得分:0)
我建议您忘记使用PK的自定义字段,而使用常规的自动ID。您还可以使用cus_id
,要求它不可为空且唯一。这样,您可以毫无问题地通过常规表格进行更新。
否则,您可以像更新操作一样进行更新,将旧实例字段的内容克隆到新实例中,然后删除旧实例。