2017-04-03 58 views
1

與我的previous question類似,我試圖在ModelAdmin中使用相關模型。 (這是因爲我希望它可以在兩個管理員視圖中使用。)但是,這次我使用的是新的ParentalManyToManyField或僅僅是正常的ManyToManyField,這看起來很糟糕。在ModelAdmin中使用reverse(Parental)ManyToManyField

我寫了下面的結構:

class B(Model): # or Orderable 
    ... 
    edit_handler = TabbedInterface([ 
     ObjectList([ 
      FieldPanel('aes', widget=CheckboxSelectMultiple), 
     ], heading=_('Aes'), 
     ), 
    ]) 

class A(ClusterableModel): 
    ... 
    bees = ParentalManyToManyField(
     B, 
     related_name='aes', 
     blank=True, 
    ) 
    ... 
    edit_handler = TabbedInterface([ 
     ObjectList([ 
      FieldPanel('bees', widget=CheckboxSelectMultiple), 
     ], heading=_('Bees'), 
     ), 
    ]) 

當試圖訪問的網頁,我收到一個Field Error

Unknown field(s) (aes) specified for B

是什麼,我試圖做不可能的但還是沒我忘了一步?

回答

2

ParentalManyToManyField需要在父模型上定義(我假設這裏是B的意思 - 也就是說,modeladmin接口被設置爲編輯B的一個實例,其中有幾個A被鏈接到它)並且被它的字段引用名稱而不是related_name。此外,應該是已定義爲ClusterableModel,不是孩子的父模型:

class B(ClusterableModel): 
    aes = ParentalManyToManyField('A', blank=True) 

    edit_handler = TabbedInterface([ 
     ObjectList([ 
      FieldPanel('aes', widget=CheckboxSelectMultiple), 
     ], heading=_('Aes')), 
    ]) 

class A(Model): # doesn't need to be Orderable, because M2M relations don't specify an order 
    ... 
+0

恐怕它不會解決我的問題。它可能不太清楚,但我想在兩個管理視圖中訪問關係。那麼有什麼方法可以實現這一點而不必切換關係? – Dekker

+1

ParentalManyToManyField並不打算從兩個方向進行編輯 - 它是爲頁面模型而設計的,這在邏輯上不可行(關係必須屬於一個模型或另一個模型,用於版本控制和審覈工作流程)。你在做什麼可能更接近一個簡單的ManyToManyField - 如果你嘗試這樣做會發生什麼? (我不能立即看到它不起作用的原因,但我懷疑我們從未測試過這個設置......) – gasman

+0

這也是我最初的想法,使用'ManyToManyField',但是我得到了相同的結果字段錯誤與ParentalManyToManyField一樣:FieldError:爲B指定的未知字段(aes)。 – Dekker