2011-11-03 78 views
0

我有兩個模型與它們之間的外鍵關係。在管理員中,所描述的具有外鍵關係(型號1)的模型的編輯頁面顯示一個ModelChoiceField。關係另一側(型號2)的頁面什麼也不顯示,直到我將第一個模型作爲內聯添加到ModelAdmin。內聯給我我想要一個ModelChoiceField添加到型號2,使用戶可以創建新的對象或從列表中選擇選擇了內嵌的從模型中創建一個新的對象1號在外鍵關係的兩側顯示ModelChoiceFields

的選項預先存在的。

理想情況下,我也可以使用過濾器來填充1號模型對象的新ModelChoiceField。

回答

2

好的,問這個問題除了我的個人資料上很酷的風滾草徽章外,沒有任何東西。我最終發現了以下解決方案。這比我預期的要簡單,但它讓我問另一個問題here,因爲一旦實施,從管理頁面的ModelChoiceField中選擇並保存不會按預期創建外鍵關係。

無論如何,在該解決方案:

我的藝術模型包含布爾場「has_storypak」,以表明它是否有Storypak模型的關係和實例。由於我期望Art實例只與一個Storypak相關,而Storypaks可能有很多相關的藝術作品,因此我編寫了以下自定義字段,以僅包含值爲「has_storypak」爲False的實例。

class RuntimeArtSelectForm(forms.ModelForm): 
    storypak_orphan = forms.ModelChoiceField(label="Art", 
      queryset=Art.objects.filter(has_storypak=False)) 
    class Meta: 
     model = Art 
     fields = ('storypak_orphan',) 

接下來,我添加了這個表單內聯形式的藝術模式...

class ArtInline(admin.TabularInline): 
    model = Art 
    form = RuntimeArtSelectForm 

...並列入爲的ModelAdmin的Storypak ArtInline。這給了我下拉菜單,其中包含我正在尋找的過濾的模型對象列表。不過,我仍然有上面提到的問題,並打開question尋找解決方案。