在我的models.py中,一个ForeignKey声明不需要默认值,但另一个确实如此?为什么?

时间:2016-06-20 16:45:48

标签: python django

在尝试运行manage.py makemigrations时,我收到以下错误:

You are trying to add a non-nullable field 'menu_category' to fooditem without 
a default; we can't do that (the database needs something to populate existing
rows.

我的代码如下:

models.py

class FoodItem(models.model):
    restaurant = models.ForeignKey('Restaurant', on_delete=models.CASCADE)
    menu_category = models.ForeignKey('MenuCategory', on_delete=models.CASCADE)
    ...

没有意义的部分是当我删除menu_category行时没有发生错误,尽管餐馆外键也没有默认值。另外,如果我必须为外键指定默认值,我甚至会指定什么值?

1 个答案:

答案 0 :(得分:1)

您只添加了一个名为menu_category的新列,对吧? <{1}}字段不会出错,因为它已经存在。

Django为您提供此错误,因为您要添加的字段对于已经存在而没有默认值的表不能为空。您需要允许空值(因此创建的列值在已存在的行中可以为空)或指定用于填充列的默认值。

Django应该问你是否想提供一次性的#34;默认值仅适用于migation。如果你有一些&#34;默认&#34; restaurant对象可以具有的菜单类别,然后在django提示您输入值时指定其ID。

示例prmopt:

FoodItem