django:非可空字段的默认值

时间:2015-05-20 09:58:42

标签: python django django-models

我正在通过做一些教程来学习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'时,我会收到警告:

  

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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