Django Rest Framework - при переопределении сохранения в бэкенде не создается пользовательский id

Я работаю над проектом. У меня есть Django для бэкенда и Vue для фронтэнда. При использовании шаблонов и сохранении в проекте Django у меня нет проблем.

Однако, когда я POST к API моих проектов, следующее сохранение из моего модала не создается.

models.py

class DevProjects(models.Model):
    PROJECT_TYPE = [
        ('New Application', 'New Application'),
        ('Update Application', 'Update Application'),
        ('Bug Fixes', 'Bug Fixes')
    ]
    PROJECT_STATUS = [
        ('New', 'New'),
        ('In Progress', 'In Progress'),
        ('Complete', 'Complete'),
    ]
    project_id = models.CharField(max_length=15, editable=False, unique=True)
    project_title = models.CharField(max_length=100)
    project_desc = models.CharField(max_length=500)
    project_category = models.CharField(max_length=25, choices=PROJECT_TYPE, null=True, blank=True)
    project_status = models.CharField(max_length=25, choices=PROJECT_STATUS, default='New')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateField(auto_now=True)
    created_by = models.ForeignKey(User, related_name='projects', on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        super(DevProjects, self).save(**kwargs)
        self.project_id = 'PROJ-' + str(self.id)
        super(DevProjects, self).save(**kwargs)

    def __str__(self):
        return self.project_title

У меня есть project_id, создаваемый при сохранении, который получает исходный ID, но просто добавляет 'PROJ-' перед ним. Когда я отправляю форму с фронтенда, это определение сохранения не вызывается, таким образом не создается project_id.

ID проекта - это то, что я использую для отправки GET-запроса, чтобы получить проекты.

serailizer.py

class DevProjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = DevProjects
        fields = ("project_id", "project_title", "project_desc", "project_category", "project_status")

views.py

class DevProjectViewSet(viewsets.ModelViewSet):
    serializer_class = DevProjectSerializer
    queryset = DevProjects.objects.all()

    def perform_create(self, serializer):
        serializer.save(created_by=self.request.user)

Когда я отправляю сообщение, я получаю следующую ошибку:

IntegrityError: UNIQUE constraint failed: ckcSupportWeb_devprojects.project_id

Что мне нужно сделать, чтобы project_id генерировался при постинге из DRF? Любая помощь будет принята с благодарностью.

Насколько я понимаю, вы можете ослабить ограничение уникальности на project_id и ваш предыдущий код будет работать нормально.

Поскольку код проекта не редактируется, он не будет обновлен при вызове POST API.

Я смог избавиться от всех этих проблем, написав простую функцию в utils.py, которая получает последний созданный ID, добавляет 1 и затем устанавливает новый project_id.

Попробуйте с этим фрагментом кода

def save(self, *args, **kwargs)
    self.project_id = 'PROJ-' + str(self.id)
    super(DevProjects, self).save(**kwargs)
Вернуться на верх