您正在尝试向用户配置文件添加一个非空字段 'new_field',但没有默认值。

11 浏览
0 Comments

您正在尝试向用户配置文件添加一个非空字段 'new_field',但没有默认值。

我知道从Django 1.7开始,我不需要使用South或任何其他迁移系统,所以我只使用简单的命令python manage.py makemigrations\n然而,我得到的只是这个错误:\n您正在尝试向userprofile添加一个非空字段\'new_field\',但没有默认值;我们不能这样做(数据库需要一些内容来填充现有行)。\n这是models.py的代码:\n

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    website = models.URLField(blank=True)
    new_field = models.CharField(max_length=140)

\n有哪些选项可供选择?

0
0 Comments

在给UserProfile模型添加一个非空字段 'new_field' 时,出现了 'You are trying to add a non-nullable field 'new_field' to userprofile without a default' 的问题。这个问题的原因是在添加新字段时,没有为该字段提供默认值。

解决这个问题的方法有几种。一种方法是为 'new_field' 声明一个默认值,代码如下:

new_field = models.CharField(max_length=140, default='DEFAULT VALUE')

另一种方法是将 'new_field' 声明为可为空字段,代码如下:

new_field = models.CharField(max_length=140, null=True)

如果决定接受 'new_field' 作为可为空字段,并且希望接受 'no input' 作为有效输入,则还需要添加 blank=True 语句,代码如下:

new_field = models.CharField(max_length=140, blank=True, null=True)

即使使用了 null=True 和/或 blank=True,如果有必要,仍然可以添加默认值,代码如下:

new_field = models.CharField(max_length=140, default='DEFAULT VALUE', blank=True, null=True)

需要注意的是,避免在基于字符串的字段(如CharField和TextField)上使用null。如果一个基于字符串的字段具有null=True,那么它就有两个可能的“no data”值:NULL和空字符串。

参考文献:Model field reference

0
0 Comments

在这个问题中,出现了一个非空字段 'new_field' 添加到用户配置文件(userprofile)中的问题,但没有默认值。出现这个问题的原因是在添加字段时没有指定默认值。解决方法是提供一个默认值,可以使用以下代码添加默认值:

new_field = models.CharField(max_length=140, default='SOME STRING')

如果需要将 new_field 的值设置为一个网站字段的副本,可以使用以下代码:

default = website

但是这种方法无法解决问题。解决方法是首先使用一个虚假的默认值进行迁移,然后创建一个数据迁移,通过迭代每条记录并将 new_field 设置为 website 的值。

另外,对于 CharField 字段来说,默认值应该是可选的。但是,这并没有真正回答问题,因为问题明确指出"没有默认值"。

为了解决这个问题,我们需要为添加的字段指定一个默认值,并且可以通过创建数据迁移来设置字段的值。

0
0 Comments

问题的原因:在将非空字段“new_field”添加到用户配置文件(userprofile)时,没有提供默认值。

解决方法:删除迁移文件和数据库中的迁移记录,然后重新进行迁移。如果之前创建了超级用户,则可能需要重新创建该用户。同时,确保不删除迁移文件夹中的__init__.py文件。如果仍然遇到问题,可以使用python manage.py sqlmigrate命令来查看具体的迁移信息。

如果您在开发的早期阶段,并且不关心当前数据库中的数据,可以直接删除迁移文件和数据库中的迁移记录,然后重新进行迁移。首先,需要清理迁移文件夹并从表(django_migrations)中删除相应的行。

rm your_app/migrations/*

注意:不要删除迁移文件夹中的__init__.py文件。

rm db.sqlite3
python manage.py makemigrations
python manage.py migrate

如果之前为Django的管理后台应用程序创建了超级用户,则可能需要重新创建该用户。

另外,您还需要清理迁移记录表,例如:

mysql -u[user] [database] -e "delete from django_migrations where app=[your_app]"

这是一种方法。我认为Django在迁移和模型检测等方面做得不好,希望能对此进行重大更新。

我已经从迁移中删除了所有文件,并从django_migrations表中删除了所有行,现在当我运行迁移时出现了“django.db.migrations.exceptions.NodeNotFoundError: Migration stories.0001_initial dependencies reference nonexistent parent node ('sources', '0002_auto_20180903_1224')”的错误。

另外,请确保不要删除迁移文件夹中的__init__.py文件,或者在删除后恢复该文件,否则makemigrations将无法正常工作。详情请参考stackoverflow.com/a/46362750/1649917。

有时候,当不清楚Django指的是哪个字段时,可以使用python manage.py sqlmigrate命令来查看具体的迁移信息。

当需要保留有意义的数据时,这是我常用的方法。在这种情况下,删除整个目录和django_migrations表中的相应行可能会比较麻烦。

总之,解决此问题的方法是删除迁移文件和数据库中的迁移记录,然后重新进行迁移,并确保提供默认值或正确配置字段。

0