Есть ли способ настроить значение определенного поля в модели в django при добавлении новых данных?

У меня есть модель, в которой я хочу указывать значение unique_code каждый раз, когда я добавляю новые данные .

model.py

class Customer(models.Model):
    LastName = models.CharField(max_length=45, blank=True)
    FirstName = models.CharField(max_length=45, blank=True)
    MiddleName = models.CharField(max_length=45, blank=True)
    ExtensionName = models.CharField(max_length=45, blank=True)
    GenderID = models.ForeignKey(Gender, on_delete=models.CASCADE)
    id_pic = models.ImageField(null=True, blank=True, upload_to=upload_path)
    otp = models.CharField(max_length=6, blank=True)
    unique_code = models.CharField(max_length=8, blank=True)
    verified = models.BooleanField(default=False)
    already_claimed = models.BooleanField(default=False)
    email = models.CharField(max_length=45, blank=True)
    Birthdate = models.CharField(max_length=45, blank=True, null=True)
    cellphone_number = models.CharField(max_length=45, blank=True, null=True)
    agreement1 = models.BooleanField(null=True)
    agreement2 = models.BooleanField(null=True)
    agreement3 = models.BooleanField(null=True)

Я пытаюсь переопределить метод сохранения, чтобы сделать это, и вот мой код

 def save(self, *args, **kwargs):
        self.unique_code = uuid.uuid4().hex[:8].upper()
        super().save(*args, **kwargs)

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

так можно ли указать его значение здесь, в view.py

  data = request.data
            serializer = CustomerSerializer(data=data)

как добавить unique_code = uuid.uuid4().hex[:8].upper() в эту serializer = CustomerSerializer(data=data)

Вы можете просто проверить, существует ли он уже в вашей функции save(), и вызвать ее, если его там нет. Тогда она будет вести себя последовательно при всех попытках сохранения.

def save(self, *args, **kwargs):
    if not self.unique_code:
         #object has no unique_code
         self.unique_code = uuid.uuid4().hex[:8].upper()
    super().save(*args, **kwargs)

Другой подход заключается в том, чтобы всегда присваивать его при первом сохранении, до того, как объекту будет присвоен ID. Таким образом, вы будете знать, что любой объект, сохраненный в базе данных, также будет иметь уникальный_код

def save(self, *args, **kwargs):
    if not self.id:
         #object has no id
         self.unique_code = uuid.uuid4().hex[:8].upper()
    super().save(*args, **kwargs)
Вернуться на верх