更改模型后如何更改数据库?

2024-04-25 20:26:28 发布

您现在位置:Python中文网/ 问答频道 /正文

请帮帮我,有些奇怪的事情发生了。你知道吗

我有个模特:

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:

请帮助纠正这种情况并解释发生了什么


Tags: tonameyoufalsetruedefaultfieldverbose
2条回答

南方正在努力决定如何创建一个向后迁移——换句话说,它将如何回滚您的更改。如果您对永远不想回滚此迁移感到高兴,您可以选择选项3。你知道吗

如果您确实想回滚,那么请看一下this post——它解释了如何将模型字段重命名(在本例中,messagemessage_f)。你知道吗

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

相关问题 更多 >