Дублирующее значение ключа нарушает ошибку уникального ограничения в 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.