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)
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])
4条答案
按热度按时间brccelvz1#
AFAIK Django不会执行作为参数传递的QuerySet,即使它仅限于一个元素。您应该尝试类似建议的in this post
x9ybnkn62#
因为
get_or_create
返回一个元组,我认为这是一个更好的解决方案比这个
xuo3flqw3#
这其实是@radious answer的延伸。如果您希望减少代码行,也可以在默认情况下使用lambda
注意,你必须在get_or_create()上使用索引0,因为该方法返回一个元组,所以你需要获取对象,而不是元组。
https://docs.djangoproject.com/en/1.6/ref/models/querysets/#get-or-create
y0u0uwnf4#
应该使用get_or_create()和models。ForeignKey()需要on_delete,如下所示。* 不要忘记将
.id
放在get_or_create(id=1)[0]
之后,因为models.ForeignKey()
中的默认值需要Language
对象的id
,否则会出现错误: