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

时间:2019-03-25 12:58:03

标签: django django-rest-framework primary-key

我已将名为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"

1 个答案:

答案 0 :(得分:0)

我建议您忘记使用PK的自定义字段,而使用常规的自动ID。您还可以使用cus_id,要求它不可为空且唯一。这样,您可以毫无问题地通过常规表格进行更新。

否则,您可以像更新操作一样进行更新,将旧实例字段的内容克隆到新实例中,然后删除旧实例。