2013-10-11 44 views
0

我有以下型號參考目標與GenericForeignKey:訪問在Django

Class A(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 
    thumbnail = models.ImageField(...) 

class B(models.Model) 
    title = models.CharField() 

    def save(*args, **kwargs): 
    # Based on the title field I want to fetch some picture and then save the thumbnail in A 

我有更多的類,如B,其應該從引用(這就是爲什麼我使用GenericForeignKey)。我試圖弄清楚的問題是,當我在B中的save()方法中時,如何保存縮略圖字段(在A上)。在A中插入許多if語句以檢查引用類的類型並相應地保存縮略圖非常漂亮繁瑣。

回答

0

尋找at the docs, you can add a reverse generic relationBA

如果你知道你將要使用哪些車型最常見,也可以加一個「反向」通用的關係,使額外的API

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

class B_Models(models.Model) 
    title = models.CharField() 
    a_models = generic.GenericRelation(A_Model) 

,現在你可以這樣做:

b = B_Model() 
a = A_Model(content_object=b, thumbnail=...) 
a.save() 
b.a_models.all() 
+0

嘿蒂米。謝謝你的答案..最後一塊代碼可以做到沒有泛型關係(糾正我,如果我錯了)。問題是我並不總是能夠控制對象創建的順序(在管理面板中,例如,管理腳本創建的對象) – Joel