我将名为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"
我建议你忘记使用PK自定义字段并使用常规自动ID。除此之外你仍然可以使用你的cus_id
,要求它不可空和独特。这样你可以通过常规表单更新它,绝对没有问题。
否则,您可以像以前那样更新它,将旧实例字段内容克隆到新实例并删除旧实例。