Как обновить поле первичного ключа с помощью Django Rest Framework - PullRequest
0 голосов
/ 25 марта 2019

Я установил поле с именем cus_id в поле первичного ключа, которое не является AutoField.Мне нужно изменить pk alon, чтобы сохранить другие релевантные данные для того же идентификатора, который должен быть в том же индексе, вместо 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 голосов
/ 25 марта 2019

Я бы посоветовал вам забыть об использовании настраиваемого поля для PK и перейти с обычным автоматическим идентификатором.Наряду с этим вы все еще можете использовать свой cus_id, требуя, чтобы он был ненулевым и уникальным.Таким образом, вы можете обновить его с помощью обычной формы без каких-либо проблем.

В противном случае вы можете обновить его, как и раньше, клонировать содержимое полей старых экземпляров в новое и удалить старое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...