我有一个模特:
class Feedback(models.Model):
username = models.CharField(
verbose_name=u"Имя",
max_length=100,
blank=True,
)
subject = models.CharField(
verbose_name=u"Тема",
max_length=100,
blank=False,
)
email = models.EmailField(
verbose_name=u"Email",
max_length=100,
blank=True,
)
message = models.TextField(
verbose_name=u'Сообщение',
max_length=50000,
blank=False,
)
date = models.DateTimeField(
verbose_name=u'Дата создания',
default=datetime.now(),
auto_now=True,
)
基于此,我创建了一个反馈表。她工作了。我创建了一些消息,然后从数据库中相应的表中删除所有条目
然后我更改了字段的名称:
class Feedback(models.Model):
username_f = models.CharField(
verbose_name=u"Имя",
max_length=100,
blank=True,
)
subject_f = models.CharField(
verbose_name=u"Тема",
max_length=100,
blank=False,
)
email_f = models.EmailField(
verbose_name=u"Email",
max_length=100,
blank=True,
)
message_f = models.TextField(
verbose_name=u'Сообщение',
max_length=50000,
blank=False,
)
date_f = models.DateTimeField(
verbose_name=u'Дата создания',
default=datetime.now(),
auto_now=True,
)
并从控制台发出以下信息:
(kinopom_env)kalinins@kalinins-Lenovo-Z580 ~/.virtualenvs/kinopom_project/kinopom $ python manage.py schemamigration --auto app_menu
结果如下:
- Deleted field username on app_menu.Feedback
- Deleted field date on app_menu.Feedback
? The field 'Feedback.message' does not have a default specified, yet is NOT NULL.
? Since you are removing this field, you MUST specify a default
? value to use for existing rows. Would you like to:
? 1. Quit now.
? 2. Specify a one-off value to use for existing columns now
? 3. Disable the backwards migration by raising an exception; you can edit the migration to fix it later
? Please select a choice:
请帮助纠正这种情况并解释正在发生的事情
答案 0 :(得分:2)
South正在尝试决定如何创建向后迁移 - 换句话说,它将如何回滚您的更改。如果您对自己永远不想要回滚此迁移感到高兴,可以选择选项3.
如果您确实要回滚,请查看this post - 它解释了如何重命名模型字段(在本例中为message
至message_f
)。
答案 1 :(得分:1)
这是正常的,您应该选择选项2并输入默认值,如果您不打算使用向后迁移,它可以是任意的,例如" 0"。如果您进一步执行向后迁移,将重新创建已删除的字段,并且将使用此默认值填充它们。