Django CharField с динамическим значением по умолчанию
Я хочу добавить новое поле в базу данных PostgreSQL.
Это не null и уникальное поле CharField, как
dyn = models.CharField(max_length=50, null=False, unique=True)
В базе данных уже есть соответствующие записи, так что это не вариант
- удалите базу данных
- сбросьте миграции
- сотрите данные
- установите статическое значение по умолчанию.
Как действовать?
Вы можете сбросить миграции, отредактировать их или создать новые, например:
python manage.py makemigrations name_you_want
после этого:
python manage.py migrate same_name
редактировать: пример для функции:
def generate_default_data():
return datetime.now()
class MyModel(models.Model):
field = models.DateTimeField(default=generate_default_data)
В итоге я использовал один из методов , показанных Олегом
def dynamic_default_value():
"""
This function will be called when a default value is needed.
It'll return a 31 length string with a-z, 0-9.
"""
alphabet = string.ascii_lowercase + string.digits
return ''.join(random.choices(alphabet, k=31)) # 31 is the length of the string
с
dyn = models.CharField(max_length=31, null=False, unique=True, default=dynamic_default_value)
Если бы поле было max_length 32 символа, то я бы использовал hex_uuid()
, присутствующий в вопросе.