2

我想允许 wagtail admin 中的下拉菜单从另一个模型的流域中包含的值(块)中进行选择,这可能吗?我想象过这样的事情:

Feedback(page):
    paper = models.ForeignKey('PaperPage', on_delete=models.CASCADE, null=True, blank=False, help_text="The paper associated with this feedback. Auto assigned.")

    content_panels = [
        InlinePanel('paper__drafts_id', label='Draft')   <--- this doesn't work
    ]

在哪里

Paper(page):
    drafts = StreamField(
            [
                ('draft_block', blocks.ListBlock(blocks.StructBlock([
                    ('date', blocks.DateTimeBlock(required=True, label='Date draft uploaded')),
                    ('uploaded_by', MemberBlock(required=False, label='Uploaded by',
                                                help_text="Who is uploading this draft.")),
                    ('draft_file', DocumentChooserBlock(required=False, label='Upload file')),

                ]), template='papers/blocks/drafts.html')),
            ],
            blank=True
        )

但我不确定这是否可能?任何建议将不胜感激。谢谢!

4

1 回答 1

4

这是一个缺点StreamField- 数据不存储为“真正的”数据库对象,而只是作为存储在页面上的 JSON 文本,因此无法定义关系,例如ForeignKeys 指向该数据中的单个项目。

InlinePanel如果流中只有一种块类型,如您的示例代码中那样,那么将“草稿”定义为Paper 模型上的子对象(带有 )会更合适;然后它将作为真正的数据库模型存在。

于 2019-02-19T09:14:47.740 回答