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(), присутствующий в вопросе.

Вернуться на верх