Так некоторое время пара миграция после моей первой, я решил, что я хотел, чтобы включить эти поля:Django 1.8 Migrations. Добавление DateTimeField после создания db. Лучшие практики?
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
в одну из моих моделей. Когда я makemigrations
он дал мне You are trying to add a non-nullable field 'created' to episode without a default; we can't do that (the database needs something to populate existing rows).
Так я тогда изменил его
created = models.DateTimeField(auto_now_add=True, default=datetime.now)
После снова пытается makemigrations
, он сказал, что at_api.Episode.modified: (fields.E160) The options auto_now, auto_now_add, and default are mutually exclusive. Only one of these options may be present.
Хорошо, так что я просто пошел вперед и сняли auto_now_add
created = models.DateTimeField(default=datetime.now)
Я мог бы сейчас makemigrations
без проблем. И затем я позже удалил default=datetime.now
и заменил его на auto_now_add=True
и без проблем переместился снова. Однако я не могу не чувствовать, что это может быть не лучший способ сделать что-то. Я чувствую, что что-то может пойти не так позже в проекте.
Да, django спрашивал меня о единовременном значении для существующих строк. Я попробовал 'datetime.now', но он, похоже, не работал. Но я полагаю, что все в целом хорошо? Является ли типичным установить «null = True» в качестве «заполнителя» для существующих значений строк, а затем удалить его позже, чтобы заменить что-то еще? – pyramidface
'datetime.now()' работал бы (обратите внимание на круглые скобки - вы хотите * вызвать * функцию и использовать ее возвращаемое значение). Вы добавляете и удаляете «null = True» в более сложных случаях, когда вы хотите присвоить другое значение различным строкам. Например, предположим, что у вас была фактическая дата создания, хранящаяся в файле где-нибудь. Вы должны написать миграцию данных, которая для каждой строки искала дату в файле, а затем помещала ее в базу данных. После этого вы можете удалить «null = True» и снова выполнить миграцию. –
Ах, ладно, я буду помнить это о будущих проектах. Благодаря!! – pyramidface