我定义了以下模型并获得
错误: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'
我在哪里做错了????
答案 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)
以下是我为解决同样问题所做的工作
希望这会有所帮助。 每次遇到这类错误时,此解决方案都可以使用。
答案 3 :(得分:1)
大多数此类情况不是不向模型添加文件的问题(使用makemigrations和迁移)
但是由于Fields模型和表单类型中的错误不正确(这是由于外键的语法错误造成的)
首先请参阅:https://www.djangoproject.com/
还有其他原因:
有时数据库会被填充,并且它只接受非可空值 (在新版本的django中,此错误非常频繁
SO也在你的模型中设置条件(null == True)
答案 4 :(得分:0)
我也遇到过同样的问题:...视频数据的非空字段'用户'...
型号:Videodata
字段:用户
只需在模型Videodata的现场用户中再添加一个attr:default =''
答案 5 :(得分:-1)
以下是我的工作:
requirement = models.ForeignKey(Requirement)
更改为requirement = models.ForeignKey(Requirement, null=True)
requirement = models.ForeignKey(Requirement, null=True)
更改回requirement = models.ForeignKey(Requirement)
我猜django-orm关于foreignKey的规则是:
答案 6 :(得分:-1)
当你在models.py文件中进行大量更改时,有时会出现问题(在我的情况下,它与ImageField非可空字段有关)。而不是实地问题。 django 2.0.2,python 3.6.4,mysql 5.7.21
中的一个解决方案general_app/migrations/*.py
内的所有文件,__init__.py
除外,请注意。您可以检查问题是否已修复,如果没有:
mysql> DROP DATABASE <name_db>
)这些步骤解决了我的问题。现在你可以毫无错误地运行:
mysql> CREATE DATABASE <name_db>