Обход ошибки integrityError, полученной от уникального поля в модели django
Я хочу, чтобы уникальное поле генерировалось на уровне базы данных. Способ, которым работает unique=True, заключается в том, что он выдает ошибку, если видит дублирующееся значение в базе данных. Но мне это не нужно, я хочу, чтобы вместо ошибки просто генерировалось новое уникальное число.
Это модель, которая дает пользователю номер учетной записи, Любая помощь будет высоко оценена
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
account_number = ShortUUIDField(unique=True,length=10, max_length=25, prefix="217", alphabet="1234567890")
Вы можете переопределить метод save
в своей модели, чтобы перехватить ошибку целостности, возникающую в этом методе, и установить новое значение для номера счета.
import random
import string
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
account_number = CharField(unique=True,length=10, max_length=25)
def save(self, *args, **kwargs):
saved = False
while(!saved)
try:
super().save(*args, **kwargs)
saved=True
except IntegrityError:
length = 10 # Set this value to fit your needs
self.account_number = '217' + ''.join(random.choice(string.digits) for _ in range(length))