2014-11-21 113 views
0

请帮忙,发生一些奇怪的事情。如何更改模型后更改数据库?

我做了一个模型:

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)[email protected] ~/.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: 

请帮忙纠正ŧ他的情况,并解释发生了什么

回答

2

South正试图决定如何创建向后迁移 - 换句话说,它将如何回滚您的更改。如果你很高兴你永远不会想要回滚此迁移,则可以选择选项3.

如果您确实想要回滚,那么看看this post - 它解释了如何重命名一个模型字段(在这种情况下,messagemessage_f)。

1

这是正常的,你应该选择选项2并输入默认值,如果你不打算使用后向迁移它可以是任何,例如“0”。如果您进一步执行向后迁移,则会重新创建已删除的字段,并且它们将由此默认值填充。

相关问题