我正在尝试使用South向Django模型添加ForeignKey
字段。我收到以下错误:
ValueError: You cannot add a null=False column without a default value.
事实上,我确实为字段指定了一个默认值,但我不确定我是否正确。
language = models.ForeignKey(Language, default=Language.objects.all()[0])
这应该有用吗?
答案 0 :(得分:8)
AFAIK Django不会执行作为参数传递的QuerySet,即使它仅限于一个元素。你应该尝试类似提议的in this post
class Foo(models.Model):
a = models.CharField(max_length=10)
def get_foo():
return Foo.objects.get_or_create(id=1)
class Bar(models.Model):
b = models.CharField(max_length=10)
a = models.ForeignKey(Foo, default=get_foo)
答案 1 :(得分:2)
这实际上是@radious答案的延伸。如果你想要删除代码行,你也可以在默认情况下使用lambda
class Foo(models.Model):
a = models.CharField(max_length=10)
class Bar(models.Model):
b = models.CharField(max_length=10)
a = models.ForeignKey(Foo, default=lambda: Foo.objects.get_or_create(id=1)[0])
请注意,您必须在get_or_create()上使用索引0,因为该方法返回一个元组,因此您需要获取对象,而不是元组。
https://docs.djangoproject.com/en/1.6/ref/models/querysets/#get-or-create
答案 2 :(得分:1)
def get_default():
result, _ = Foo.objects.get_or_create(id=1)
return result
我认为这是比
更好的解决方案return Foo.objects.get_or_create(id=1)
因为get_or_create返回元组