错误:“您正在尝试添加不可为空的字段”

时间:2015-07-11 12:48:44

标签: python django

我定义了以下模型并获得

错误:You are trying to add a non-nullable field 'user' to videodata without a default; we can't do that

models.py

class User(Model):
    userID = models.IntegerField()
    userName = models.CharField(max_length=40)
    email = models.EmailField()
    class Meta:
        ordering = ['userName']
        verbose_name = 'User MetaData'
        verbose_name_plural = 'Users MetaData'
    def __unicode__(self):
        return str(self.userName)

class VideoData(Model):
    video = models.CharField(max_length=40)
    time  = models.IntegerField()
    user = models.ForeignKey(User, related_name='User')
    class Meta:
        verbose_name = 'User_Video MetaData'

我在哪里做错了????

7 个答案:

答案 0 :(得分:22)

如错误所示,VideoData上的用户字段不允许空值,因此您需要为其提供默认用户或允许空值。最简单的方法是允许空值。

user = models.ForeignKey(User, related_name='User', null=True)

或拥有默认用户

user = models.ForeignKey(User, related_name='User', default=<have your default user id here>)

答案 1 :(得分:13)

我的OneToOneField遇到了同样的问题。而且,我所做的是删除所有迁移文件(位于您的应用程序下的migrations目录下),并运行:

python manage.py makemigrations

python manage.py migrate

我不知道为什么,但它适用于我的情况。尝试上面写的东西不会让你受伤。

祝你好运!

答案 2 :(得分:1)

以下是我为解决同样问题所做的工作

  1. 视频数据 中注释外键引用并运行makemigrations并迁移
  2. admins.py 中添加模型,并在表格
  3. 中创建一个新条目
  4. 现在取消注释外键引用并提供默认= 1 。运行迁移和迁移
  5. 删除外键字段中的 default = 1
  6. 希望这会有所帮助。 每次遇到这类错误时,此解决方案都可以使用。

答案 3 :(得分:1)

大多数此类情况不是不向模型添加文件的问题(使用makemigrations和迁移)

但是由于Fields模型和表单类型中的错误不正确(这是由于外键的语法错误造成的)

首先请参阅:https://www.djangoproject.com/

还有其他原因:

有时数据库会被填充,并且它只接受非可空值 (在新版本的django中,此错误非常频繁

SO也在你的模型中设置条件(null == True)

答案 4 :(得分:0)

我也遇到过同样的问题:...视频数据的非空字段'用户'...

型号:Videodata

字段:用户

只需在模型Videodata的现场用户中再添加一个attr:default =''

答案 5 :(得分:-1)

以下是我的工作:

  1. requirement = models.ForeignKey(Requirement)更改为requirement = models.ForeignKey(Requirement, null=True)
  2. 运行makemigrations并迁移
  3. requirement = models.ForeignKey(Requirement, null=True)更改回requirement = models.ForeignKey(Requirement)
  4. 运行makemigrations并再次迁移。
  5. 我猜django-orm关于foreignKey的规则是:

    1. 首次创建表时允许foreignKey为null
    2. 拒绝添加一个null的foreignKey,因为之前插入到表中的数据的foreignKey将为null,这对程序员来说将是
    3. 允许将foreignKey从非null更改为null。

答案 6 :(得分:-1)

当你在models.py文件中进行大量更改时,有时会出现问题(在我的情况下,它与ImageField非可空字段有关)。而不是实地问题。 django 2.0.2,python 3.6.4,mysql 5.7.21

中的一个解决方案
  • 删除迁移文件夹general_app/migrations/*.py内的所有文件,__init__.py除外,请注意。

您可以检查问题是否已修复,如果没有:

  • 重复上述步骤,
  • 删除您的数据库(例如,在mysql mysql> DROP DATABASE <name_db>
  • 现在创建一个名称相同的新{。}}。

这些步骤解决了我的问题。现在你可以毫无错误地运行:

mysql> CREATE DATABASE <name_db>