Дублирующее значение ключа нарушает ошибку уникального ограничения в Django

У меня есть модель с именем package в приложении с именем exam. Я использую Django rest framework и имею следующий вид:

class PackageListCreaet(ListCreateAPIView):
    queryset = Package.objects.all()
    serializer_class = PackageSerializer
    permission_classes = (IsAdminAndReadOnlyForStaff,)

    @method_decorator(rest_error_decorator(logger))
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

и следующий сериализатор:

class PackageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Package
        fields = ('pk','name','price','exams','active')

когда я пытаюсь создать новый пакет из Django admin, он работает просто отлично. Но когда я пытаюсь создать новый пакет, используя вышеуказанный API, он выдает следующую ошибку:

duplicate key value violates unique constraint \"exam_package_pkey\"\nDETAIL:  Key (id)=(1) already exists

Я немного поискал решение и понял, что проблема в том, что поле id таблицы exam_package не синхронизируется. Я попробовал синхронизировать его вот так и это не помогло. Затем я попробовал удалить все записи (что произошло без ошибок) и установить первичный ключ на 1 как здесь. И все равно ничего не получилось. Я просмотрел эту ссылку и понял, что возможно моя проблема такая же и возможно DRF создает два новых экземпляра, поэтому я получаю ошибку. Но я понятия не имею, как это исправить.

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

read_only_fields = ('pk',)

Поэтому он не нужен, когда вы создаете пакет через API.

Вернуться на верх