2017-02-17 49 views
0

我正在建立一個模型,需要用一些子模型的實例來創建。我希望能夠在管理界面中編輯和創建此模型,因此我使用ModelAdmin來添加它。根據documentation我應該能夠按照正常Page類型指定字段/面板;但是,當我添加一個InlinePanel時,我在相關字段名稱上得到了一個KeyError如何在ModelAdmin中使用InlinePanel?

models.py

class Application(models.Model): 
    # other fields.... 

    panels = [MultiFieldPanel([ 
     FieldPanel('applicant'), 
     FieldPanel('position'), 
     FieldPanel('cover_letter'), 
     FieldPanel('qualifications'), 
     InlinePanel('references'), 
     FieldPanel('draft'), 
    ])] 


class Reference(models.Model): 

    application = models.ForeignKey(
     Application, 
     related_name='references', 
     on_delete=models.CASCADE, 
     blank=False, 
    ) 

    # other fields.... 

wagtails_hooks.py

class ApplicationAdmin(ModelAdmin): 
    model = Application 
    menu_icon = 'mail' 
    menu_order = 400 
    list_display = # other fields.... 

modeladmin_register(ApplicationAdmin) 

錯誤

請求URL:http://127.0.0.1:8000/admin/involvement/application/create/

Django的版本:1.10.5

異常類型:KeyError異常

異常值: '引用'

異常地點:/[APPFOLDER]/venv/lib/python3.6/site-包/鶺鴒/ wagtailadmin /在初始化 edit_handlers.py ,線627

我無法確定我做錯了什麼。任何人都可以指引我走向正確的方向嗎?

回答

2

W re依靠django-modelcluster庫來允許父窗口和子窗口模型作爲一個單元處理。爲此,基礎應用程序模型必須繼承modelcluster.models.ClusterableModel(W 模型將此作爲標準),並且子模型必須鏈接ParentalKey而不是ForeignKey

InlinePanel中的子模型通常也是Orderable的子類,因此它們可以進行排序;我的頭頂我不記得這是絕對的要求,還是隻是一個建議。

from modelcluster.models import ClusterableModel 

class Application(ClusterableModel): 
    # ... 

class Reference(Orderable): 
    application = models.ParentalKey(
     Application, 
     related_name='references', 
     on_delete=models.CASCADE, 
     blank=False, 
    ) 
+0

這解決了我的問題。謝謝! – Dekker

相關問題