Есть ли способ настроить значение определенного поля в модели в 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)