通用关系设置content_object与未保存的模型

时间:2012-01-26 06:49:33

标签: django django-models django-contenttypes

说我有以下型号:

class Foo(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

class Bar(models.Model):
    baz = models.BooleanField()

然后运行以下代码:

f = Foo(content_object=Bar(baz=False))
print f.content_object

我期望看到的是:

<Bar: Bar object>

但相反它看起来好像是空的......为什么会这样?

2 个答案:

答案 0 :(得分:2)

请遵循以下内容:

b=Bar(baz=False)
b.save()
f = Foo(content_object=b)
f.content_object

这为您提供了理想的结果。

答案 1 :(得分:1)

Content_object必须分为content_typeobject_id。在将对象保存到数据库之前,没有object_id可用。因此,你必须先保存它 - 就像Sandip建议的那样。您也可以采用较短的形式:Baz.objects.create(baz=False)