2017-02-17 7 views
0

여러 하위 모델 인스턴스로 생성해야하는 모델을 설정 중입니다. admin 인터페이스에서이 모델을 편집하고 생성 할 수 있기를 원하므로 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/

장고 버전 : 1.10.5

예외 유형 : KeyError를

예외 값 : '참조'

예외 위치 : /[APPFOLDER]/venv/lib/python3.6/site- 패키지/할미새/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