2011-03-26 2 views
3

저는 FeinCMS를 처음 사용하고 자신의 콘텐츠 유형을 만들려고합니다. 그건 내가 만든 다른 맞춤형 콘텐츠 유형을 사용합니다.FeinCMS 관리자 인라인

아래 코드에서 ContentBox 섹션에서 "CollapsiblePanels"만 만들 수 있기를 원하는 경우 관리자에게 "CollapsiblePanel"이 표시되지 않습니다.

각 ContentBox에 대해 여러 개의 CollapsiblePanels을 만들 수도 있습니다. 내가 관리자는 ContentBoxMedia 당 여러 CollapsiblePanel의를 가질 수 있어야합니다 경우에는 ContentBox

class CollapsiblePanel(models.Model): 
    title = models.CharField(max_length=255) 
    content = models.TextField() 

    def render(self, **kwargs): 
     return render_to_string('collapsiblepanel.django.html', { 
      'media': self, 
      'title': mark_safe(self.title), 
      'text': mark_safe(self.content), 
     }) 

class ContentBoxMedia(RichTextContent): 
    title = models.CharField(_('title'), max_length=200, blank=True) 
    collapsible = models.BooleanField() 
    collapsiblePanels = models.ForeignKey(CollapsiblePanel) 

    class Meta: 
     abstract = True 
     verbose_name = 'Content Box' 
     verbose_name_plural = 'Content Box' 

    def render(self, **kwargs): 
     return render_to_string('contentbox.django.html', { 
      'media': self, 
      'title': mark_safe(self.title), 
      'text': mark_safe(self.text), 
     }) 
+0

이 코드에는 두 가지 문제가있는 것으로 보입니다. 첫째, CollapsiblePanel에 대한 ForeignKey는 아마도 틀렸을 것입니다. 이것은 설명에서 판단 할 때 다른 방향이어야합니다. 둘째, 인라인 편집은 인라인으로 할 수 없습니다. Django는 이것을 허용하지 않습니다. 따라서 FeinCMS도 마찬가지입니다. –

+0

하하; 내가 지금 내 대답에서 설명했던대로 ... 안녕 Matthias :) – DrMeers

답변

2

내부의 CollapsiblePanels를 추가 할 수 있도록 함께이를 연결하는 방법을 알아내는 데 문제가, 당신의 관계를 설정하는 틀린 방법 - ForeignKeyCollapsiblePanel에 대신 있어야합니다.

그러나 나중에 인라인으로 CollapsiblePanel을 자동 처리하는 것으로 보입니다. FeinCMS가 모든 콘텐츠 유형을 인라인으로 처리하기 때문에 (ContentBoxMedia 개체는 이미 부모 개체의 인라인으로 처리되어 있음) Django는 nested inlines을 지원하지 않으므로이 기능은 기본적으로 작동하지 않습니다.

나는 그러한 기능을 제공하기위한 해킹이 끔찍하게 복잡 할 것이라고 생각합니다. ContentBoxMedia 템플릿에서 자신 만의 formset을 렌더링하려고 할 수 있지만 쉽게 처리 할 수없는 데이터를 처리하려면 ItemEditor.change_view 메서드를 해킹해야합니다. 또는 Ajax 방식을 채택하여이 문제를 피할 수도 있지만 내에서 작동하며ContentBoxMedia 오브젝트 만 새로 작동합니다.

CollapsiblePanel 인라인을 사용할 수 있도록 ContentBoxMedia을 관리자에게 직접 등록하려고 시도 할 수도 있지만이 경우 메인 FeinCMS 상위 관리자 페이지를 그대로 두어 편집해야합니다. 이것을 탐구하고 싶다면 Base.content_type_for을 사용하고 결과 모델을 AdminSite에 등록해야합니다 (물론 인라인을 명시 적으로 등록해야합니다).

+0

답장을 보내 주셔서 감사합니다. 여기에 제가 생각해 낸 것이 있습니다 만, 지금은 렌더링 문제가 있습니다. [Pastebin Code] (http://pastebin.com/wC58qgy0) 렌더링 문제는 필자가 드롭 다운에서 선택한 것을 렌더링하지 못한다는 사실입니다. 내 렌더링 함수가 어떤 모습인지 확신 할 수 없다. – Jeremy

+0

간단한 예를 들어 설명해 주시겠습니까? [Base.content_type_for] (http://www.feinheit.ch/media/labs/feincms/contenttypes.html#obinding-a-concrete-content-type-model) – Jeremy

+0

문서에 대한 링크로, 간단한 사용 예. 'x = MyBaseModel.content_type_for (ContentBoxMedia)'''admin.site.register (x)'또는 이와 유사한 것. 그러나 그것이 당신이 수반하는 것을 이해하는지 확실히 확신하지 않는 한 그것에 시간을 낭비하지 마십시오. 업데이트 된 예제 모델은 추상적 인 것처럼 보이지 않으므로 FeinCMS 콘텐츠 유형으로 사용할 수 없습니다. – DrMeers