如何为Django的ForeignKey字段指定默认值?
我正在尝试在Django模型中添加一个ForeignKey
字段,使用的是South这个工具。结果我遇到了一个错误:
ValueError: 你不能添加一个不允许为空(null=False)的字段而没有默认值。
其实我确实给这个字段指定了一个默认值,但我不太确定我是不是指定对了。
language = models.ForeignKey(Language, default=Language.objects.all()[0])
这样做应该没问题吧?
4 个回答
1
这其实是对@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
因为 get_or_create
返回的是一个元组,所以我觉得这个解决方案更好
def get_default():
result, _ = Foo.objects.get_or_create(id=1)
return result
比这个更好
return Foo.objects.get_or_create(id=1)
18
据我所知,Django 不会执行作为参数传入的 QuerySet,即使它只限制为一个元素。你可以尝试一下这个帖子中提到的方法 在这里
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)