2017-12-11 11 views
0

Wagtail CMS에 대한 질문이 있습니다.Wagtail CMS의 StreamField에 문서를 추가하려면 어떻게해야합니까?

최근 Wagtail Page 모델의 인스턴스 StreamField에서 프로그래밍 방식으로 일부 문서를 가져 오려고합니다. 나는 연구를했지만 결과는 얻지 못했습니다.

현재 내가 사용하고 있습니다 :

  • 할미새 1.13
  • 장고 1.11.6
  • 파이썬 여기에 2.7

나는 문서를 가져와야하는 페이지의 모델 첨부 파일 (동음 이의어 필드 참조) :

class EventPage(TranslatablePage, Page): 

# Database fields 
uuid = models.UUIDField(verbose_name='UUID', default=uuid.uuid4) 
start_date = models.DateField(verbose_name='Start date') 
end_date = models.DateField(verbose_name='End date') 
location = models.CharField(verbose_name='Place', max_length=255, null=True, blank=True) 
body = RichTextField(verbose_name='Body') 
attachments = StreamField(blocks.StreamBlock([ 
    ('document', DocumentChooserBlock(label='Document', icon='doc-full-inverse')), 
]), verbose_name='Attachments', null=True, blank=True) 
subscribe = models.BooleanField(verbose_name='Subscribe option', default=False) 

# Editor panels configuration 
content_panels = [ 
    FieldPanel('title', classname='title'), 
    MultiFieldPanel([ 
     FieldRowPanel([ 
      FieldPanel('start_date'), 
      FieldPanel('end_date'), 
     ]), 
    ], heading='Period'), 
    FieldPanel('location'), 
    FieldPanel('body'), 
    StreamFieldPanel('attachments'), 
] 

promote_panels = Page.promote_panels + [ 
    MultiFieldPanel([ 
     FieldPanel('subscribe'), 
    ], heading='Custom Settings'), 
] 

settings_panels = TranslatablePage.settings_panels + [ 
    MultiFieldPanel([ 
     FieldPanel('uuid'), 
    ], heading='Meta') 
] 

parent_page_types = ["home.FolderPage"] 
subpage_types = [] 

쉘에서 나는 this page에 설명 된 솔루션을 적용하려고했지만 성공하지는 못했습니다.

파이썬이 저에게 주신 오류 : AttributeError : 'list'객체에는 'pk'속성이 없습니다.

답변

2

event.attachments = [('document', doc)]이 작동해야한다고 생각합니다. (AccordionRepeaterBlock이 StreamBlock에 중첩 된 StreamBlock 때문에 the other question you link to에서 StreamChild이 필요했다, 즉 당신의 정의에 대한 그렇지 않다.)

event.attachments에 그, 기존 StreamField 내용에 문서를 추가 할 새 목록을 구축하고 할당하려면 :

new_attachments = [(block.block_type, block.value) for block in blocks] 
new_attachments.append(('document', doc)) 
event.attachments = new_attachments 

(현재 당신이 StreamField 값에 직접 추가 할 수는 없지만, this may well be supported in a future Wagtail release ...)

+0

고마워요! : D – nifel87

+0

그리고'event.attachments'에 이미 문서가 포함되어있을 때 ** 문서 **를 추가하고 싶습니까? – nifel87

+0

답변을 업데이트했습니다. – gasman