【问题标题】:django: default for non-nullable fielddjango:不可为空字段的默认值
【发布时间】:2015-05-20 09:58:42
【问题描述】:

我正在通过一些教程学习 django,并且目前在 effective-django 教程中拥有所有权。不幸的是,这些教程是为旧版本的 django 编写的,所以有些东西略有不同。

在 models.py 中向我的模型联系人添加“所有者”字段时遇到问题:

from django.db import models
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User

class Contact(models.Model):
    """
        Interface for contact class
    """
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    email = models.EmailField()
    owner = models.ForeignKey(User)

    def __str__(self):
        return ' '.join([self.first_name, self.last_name])

    def get_absolute_url(self):
        return reverse('contacts-view', kwargs={'pk': self.id})

尝试运行“makemigrations”时,我收到警告:

您正在尝试在没有默认值的情况下添加不可为空的字段“所有者”来联系:不能这样做

这对于现有数据库是有意义的,所以我尝试刷新数据库。但是,问题仍然存在。字段所有者的默认值应该是什么?我也尝试使该字段可以为空,但这给了我字段所有者不能为空的错误。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    我通常设置为1。在这种情况下,已经存在的记录将分配给第一个用户。

    如果您愿意,您可以稍后在下次数据迁移中重新分配这些记录。

    【讨论】:

    • 添加这个确实解决了问题,这对后续添加的联系人有影响吗?
    • 否,新添加的联系人将没有此字段的任何默认值。此值将仅设置为迁移时数据库中存在的记录。
    【解决方案2】:

    好吧,数据库是否为空都没有关系。重要的是,您可能已经至少有一个迁移首先创建了模型,然后您尝试运行 makemigrations 来添加该字段。

    如果这些迁移对您来说不太重要(我认为它们不是因为这是一个教程),只需删除所有以前的迁移并运行 makemigrationsfresh。

    或者,您必须手动更改迁移,可能提供默认值等。

    【讨论】:

    • 好的,但是当我删除所有迁移并重置数据库时,我仍然收到警告'contacts_contact.owner_id may not be null'
    猜你喜欢
    • 2018-02-13
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多