django:非空字段的默认值

django: default for non-nullable field

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

我 运行 在向我的模型添加 'owner' 字段时遇到问题 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' 时,我收到警告:

You are trying to add a non-nullable field 'owner' to contact without a default: can't do that

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

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

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

好吧,数据库是否为空并不重要。重要的是您可能已经至少进行了一次首先创建模型的迁移,然后您尝试 运行 makemigrations 添加字段。

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

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