如何使用Django Rest Framework更新主键字段

问题描述 投票:0回答:1

我将名为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"
django django-rest-framework primary-key
1个回答
0
投票

我建议你忘记使用PK自定义字段并使用常规自动ID。除此之外你仍然可以使用你的cus_id,要求它不可空和独特。这样你可以通过常规表单更新它,绝对没有问题。

否则,您可以像以前那样更新它,将旧实例字段内容克隆到新实例并删除旧实例。

© www.soinside.com 2019 - 2024. All rights reserved.