Wagtail 스트림 필드를 사용하여 사용자가 편집기 인터페이스에서 문서를 업로드하고 연결할 수 있습니다. 원래 필자는 설명서에서 언급 한 외래 키와 내가 본 모든 다른 예제를 사용하려고했습니다. wagtail 문서에 "set name"속성이없는 마이그레이션을 실행할 때 계속 오류가 발생했습니다. 그래서 외래 키를 사용하지 않기로 결정했습니다. 왜냐하면 이러한 문서가 반드시 우리의 목적을 위해 일대 다 관계에 관련 될 필요는 없기 때문입니다. 그래서 내 모델에서는 DocumentChooserBlocks를 사용하는 모든 필드에 외래 키를 사용하지 않으며 모든 것이 잘 작동하는 것 같습니다. 나는 "외래 키"를 오해하고 실수를 저 지르거나 나쁜 DB 디자인을 연습합니다. 다음은이 내 작업 모델 :DocumentChooserBlocks에 외래 키가 있어야합니까?
class AgendaPage(Page):
author= models.CharField(max_length=255)
date = models.DateField('Post date')
mtg_date = models.DateField(default=datetime.date.today)
mtg_time = models.CharField(max_length=255, default ='10:00 AM')
full_video_url-models.CharField(required =False)
###full_audio = DocumentChooserBlock(required=False)
###mtg_transcript = DocumentChooserBlock(required=False)
])
agenda = StreamField([
('agenda_item', blocks.StreamBlock([
('item_title', blocks.TextBlock()),
('item_text', blocks.TextBlock()),
('mtg_doc', blocks.StructBlock([
('mtg_doc_upload', DocumentChooserBlock(required=True)),
('submitted_late', blocks.BooleanBlock(required=False, help_text='Submitted Late')),
('heldover', blocks.BooleanBlock(required=False, help_text='Held Over')),
('heldover_from', blocks.DateBlock(required=False, help_text="Held Over From")),
])),
('item_audio', DocumentChooserBlock(required=False)),
]))
])
content_panels = Page.content_panels + [
FieldPanel('author'),
FieldPanel('date'),
FieldPanel('mtg_date'),
FieldPanel('mtg_time'),
StreamFieldPanel('agenda'),
]
또한, 모델의 두 가지 주석 처리 된 라인에서, 나는이 구문을 알고 (외래 키 없음) streamfield 내부가 아닌 DocumentChooserBlock을 위해 노력하고 있어요 모든 예제에서 볼 수 있듯이 모델 정의에서 forein 키를 정의한 다음 패널 정의에서 DocumentChooser 패널을 참조합니다. 외래 키없이 할 수 있습니까 (또는 권장) 할 수 있습니까?
외부 키가없는 스트림 필드 내에없는 DocumentChooserPanel을 어떻게 만들 수 있습니까? – JohnnyP
그렇지 않습니다. 외래 키는 페이지 X가 문서 Y와 연관되어 있음을 데이터베이스가 알 수있게 해주는 것입니다. 실제로 외래 키를 사용하지 않으려면 일반 Django FileField (https : //docs.djangoproject)를 사용할 수 있습니다. FieldPanel과 함께/com/en/1.10/ref/models/fields/# django.db.models.FileField)하지만 훨씬 원시적입니다 (팝업 선택기 인터페이스가 아닌 일반 '업로드'필드 만 가져옵니다.). – gasman
나는 다리에 나가서이 질문을 해보겠습니다 : 왜 하천의 문서 업로드에 외래 키가 없는게 좋을까요? 이 모든 대답은 나를 교육시키고 해결책에 가까워졌습니다. 그러나 나는 아직도 분명히 오해하고 있습니다. – JohnnyP