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

Adding non-nullable fields without a default in Django 1.7

我创建了以下模型来了解如何使用 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...

试试这个:

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

据说默认 models.CharField 具有属性 blank=False 意味着它不能存储空字符串值,它需要一个默认值以备不时之需store one, default="my default value" 如果它必须存储等同于空字符串的东西,将被使用。 要解决此问题,您可以执行以下操作

1)允许空字符串值

您可以通过指定来执行此操作:

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

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

您可以通过指定来执行此操作:

_first_name = models.CharField(max_length=50, db_column='first_name', default="My default value")

默认情况下我们不能存储空字符串,所以我们使用 blank=True 来允许。