在Django 1.7中添加没有默认值的非可空字段

时间:2015-02-20 19:52:26

标签: django django-models

我创建了以下模型以了解如何使用Django属性:

from django.db import models
class Person(models.Model):
    _first_name = models.CharField(max_length=50, db_column='first_name')

    @property
    def first_name(self):
        """This is the getter.  You can add logic too."""
        return self._first_name

    @first_name.setter
    def first_name(self, fname):
        self._first_name = fname

运行“makemigrations”命令时,为什么会出现以下错误?我没有必要为Django 1.7之前的字段指定默认值。它与我使用属性装饰器有什么关系吗?

感谢。

You are trying to add a non-nullable field '_first_name' to person without a default; we can't do that (the database needs something to populate existing rows).  
Please select a fix:
 1) Provide a one-off default...
 2) Quit...

2 个答案:

答案 0 :(得分:0)

试试这个:

first_name = models.CharField(max_length=50, db_column='first_name',blank=False)

答案 1 :(得分:0)

据说默认models.CharField具有属性blank=False,这意味着它无法存储空字符串值,并且需要存储一个值时需要默认值,{如果必须存储等同于空字符串的内容,则将使用{1}}。 要解决此问题,您可以执行以下操作

1)允许空字符串值

您可以通过指定:

来执行此操作
default="my default value"

2)如果遇到默认值并设置空字符串
你给他一些东西而不是存储一个空字符串。

您可以通过指定:

来执行此操作
_first_name = models.CharField(max_length=50, db_column='first_name', blank=True)

默认情况下,我们无法存储空字符串,因此我们使用_first_name = models.CharField(max_length=50, db_column='first_name', default="My default value") 来允许它。