2010-08-07 55 views
0

在我的申請,我有這樣一個模型定義:使用的contentType爲raw_id_fields

class SomeModel(models.Model): 
    someFK = Models.ForeignKey(SomeModel, null=True, blank=True) 
    otherFK = Models.ForeignKey(OtherModel, null=True, blank=True) 
    ... 

這種模式將數據保存有關記錄,並有超過100種型號的要記錄的,所以我把一個FK爲每個相關的模型。對於每條記錄,只使用其中一個FK,其他FK的設置爲NULL = True。

但是我不想改變我的模型,當我需要登錄一些其他的東西。所以,我改變我的模型,以便:

class SomeModel(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    content_id = models.IntegerField() 

所以我用下面得到我想要的東西:

content_type.get_object_for_this_type(id=content_id) 

其確定。但是當admin.py發揮作用時,它會導致問題,因爲我有一些相關模型需要記錄的1.000.000+數據,所以我需要使用raw_id_fields。由於我沒有FK爲每個相關的模型,我必須使用ContentType模型和content_id,但我不知道如何使用ContentType做到這一點?

回答

1

我知道這並不完全回答你的問題,但你應該使用泛型關係而不是多個外鍵。然後你可以達到你所需要的最終目標。

+0

正如我所說的,我的模型不包含每個模型的FK,而是一個Fk to xontent類型模型,一個相關對象的ID字段以及一個genetricFK。但是,由於genericFk在db中沒有字段表示,所以它有很多限制,我不能在admin.py中使用GenericFK – FallenAngel 2010-10-16 07:02:28

2

Django grappelligeneric lookup中擴展了Django管理功能。 所以你可以ModelAdmin有類似:

class SomeModelAdmin(ModelAdmin): 
    related_lookup_fields = { 
     'generic': [['content_type', 'object_id'], ], 
    } 

Result

它解決了我的問題查找。我希望這也能解決你的問題。

相關問題