首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >您正在尝试将非空字段“new_field”添加到用户配置文件中,而没有默认设置。

您正在尝试将非空字段“new_field”添加到用户配置文件中,而没有默认设置。
EN

Stack Overflow用户
提问于 2014-10-03 19:42:08
回答 20查看 247.7K关注 0票数 149

我知道从Django 1.7,我不需要使用南方或任何其他迁移系统,所以我只是使用简单的命令python manage.py makemigrations

然而,我得到的只是这个错误:

代码语言:javascript
运行
复制
You are trying to add a non-nullable field 'new_field' to userprofile without a default;
we can't do that (the database needs something to populate existing rows).

以下是models.py:

代码语言:javascript
运行
复制
class UserProfile(models.Model):
    user = models.OneToOneField(User)
    website = models.URLField(blank=True)
    new_field = models.CharField(max_length=140)

有什么选择?

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2014-10-03 19:47:39

您需要提供一个默认值:

代码语言:javascript
运行
复制
new_field = models.CharField(max_length=140, default='SOME STRING')
票数 121
EN

Stack Overflow用户

发布于 2015-05-26 11:01:21

,如果您正处于早期开发周期,而不关心当前的数据库数据,您只需删除它,然后迁移即可。但是首先,您需要清理迁移dir并从表(django_migrations)中删除它的行。

代码语言:javascript
运行
复制
rm  your_app/migrations/* 

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

代码语言:javascript
运行
复制
rm db.sqlite3
python manage.py makemigrations
python manage.py migrate

如果您以前为Django的Admin应用程序创建了一个超级用户,那么您可能需要再次创建用户。

票数 127
EN

Stack Overflow用户

发布于 2014-11-20 09:50:52

一个选项是声明‘new_field’的默认值:

代码语言:javascript
运行
复制
new_field = models.CharField(max_length=140, default='DEFAULT VALUE')

另一个选项是将'new_field‘声明为可空字段:

代码语言:javascript
运行
复制
new_field = models.CharField(max_length=140, null=True)

如果您决定接受'new_field‘作为一个空字段,您可能希望接受'no input’作为'new_field‘的有效输入。然后还必须添加blank=True语句:

代码语言:javascript
运行
复制
new_field = models.CharField(max_length=140, blank=True, null=True)

即使使用null=True和/或blank=True,如果有必要,也可以添加默认值:

代码语言:javascript
运行
复制
new_field = models.CharField(max_length=140, default='DEFAULT VALUE', blank=True, null=True)
票数 50
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26185687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档