2017-02-17 4 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- のinitでパッケージ/セキレイ/ wagtailadmin/edit_handlers.py 、ライン627

私は私が間違って何をしたかを決定する問題を抱えています。誰かが私を正しい方向に向けることができますか?

答えて

2

Wagtailは、親モデルと子モデルを単一の単位としてフォームで処理できるようにするため、ライブラリdjango-modelclusterを使用しています。これを行うには、基本アプリケーションモデルをmodelcluster.models.ClusterableModelから継承しなければなりません(Wagtail Pageモデルでこれを標準としています)。子モデルはForeignKeyではなくParentalKeyでリンクする必要があります。

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

関連する問題