0

Wagtail ストリームフィールドを使用して、ユーザーがエディター インターフェイスでドキュメントをアップロードしてリンクできるようにしています。もともと、ドキュメントで参照されているように、および私が見た他のすべての例と同様に、外部キーを使用しようとしました。wagtail ドキュメントにプロパティ "set name" がない移行を実行すると、エラーが発生し続けました。したがって、これらのドキュメントは、この目的のために必ずしも 1 対多の関係で関連付ける必要がないため、外部キーを使用しないことにしました。そのため、私のモデルでは、DocumentChooserBlocks を使用してすべてのフィールドに外部キーを使用しておらず、すべて正常に動作しているようです。「外部キー」を誤解していて、間違いを犯している(または悪いDB設計を実践している)のでしょうか。これが私の作業モデルです。

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'),

]

また、モデルのコメントアウトされた 2 行で、ストリームフィールド内にない DocumentChooserBlock (外部キーなし) を使用しようとしています。モデル定義を作成し、パネル定義で DocumentChooser パネルを参照します。外部キーなしでそれを行うことは可能ですか(または推奨されますか)?

4

1 に答える 1

1

DocumentChooserBlock が外部キーと共に使用されることはありません。ドキュメントをページに添付するには 2 つの異なる方法があり、どちらかを選択します。

  • AForeignKeyから Document へ、DocumentChooserPanelin でcontent_panels。これは、ページからドキュメントへの 1 対 1 または多対 1 の関係がある場合に使用されます。たとえば、製品に PDF データ シートがある ProductPage などです。これにより、データベース レベルで 2 つのオブジェクト間に正式なリンクが作成されます。

  • が入っStreamFieldたA。DocumentChooserBlockこれは、文書リンクをページのどの位置にも表示できる、より柔軟な配置に使用されます。データベース レベルでの正式な関連付けはありません。データベースの観点からは、StreamField は単なるフリー テキストです。つまり、ForeignKey は必要ありません。

于 2016-10-15T09:06:23.903 に答える