Есть ли способ проверить, существует ли значение в модели при присвоении ей значения по умолчанию? Если присваиваемое значение существует (оно не уникально), затем генерируйте другое значение. (Читать комментарии):Django unique random как значение по умолчанию
def unique_rand():
return ... # Generate a random string with 8 characters length
# It shouldn't exists among other persons
# If exists then generate another random string
class Person(models.Model):
code = models.CharField(max_length=8, unique=True, default=unique_rand())
Может быть, обходной путь не может быть внутри unique_rand
, но где-то внутри Person
класса. Я не хочу переопределять save
метод, потому что мне нужен code
до save
. Кроме того, я не хочу использовать uuid
randoms.
Обратите внимание, что @catavaran изменилось 'по умолчанию = unique_rand()' в 'умолчанию = unique_rand'. Это было сделано так, чтобы функция 'unique_rand()' вызывалась каждый раз, когда вы создаете объект Person. В противном случае его можно было бы назвать только один раз - при инициализации модели. –
Должно быть, проблема с расой! Представьте себе: p1 = Person(); p2 = Person() 'then' p1.code' может быть таким же, как 'p2.code', потому что они еще не сохранены. Как насчет этой ситуации?! – deepmax
Тогда исключение 'IntegrityError' будет поднято. Вы все равно не можете этого избежать. – catavaran