2012-01-26 14 views
1

說我有以下型號:通用的關係設定content_object未保存的模型

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> 

而是它好像是空的......這是爲什麼?

回答

1

Content_object必須拆分爲content_typeobject_id。直到將對象保存到數據庫中,沒有可用的object_id。因此你必須先保存它 - 就像Sandip建議的那樣。你也可以用更短的形式做到這一點:Baz.objects.create(baz=False)

+0

我希望有一個簡單的方法可以在保存之前「預覽」選擇,但我想我必須找到一些方法來解決這個小煩人的事實。感謝您的回答。 –

2

遵循以下幾點:

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

這給了期望的結果給你。

相關問題