【问题标题】:Wagtail: foreign key to streamfield valueWagtail:流场值的外键
【发布时间】:2019-02-15 01:12:56
【问题描述】:

我想允许 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
        )

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

【问题讨论】:

    标签: wagtail wagtail-streamfield


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢@gasman,这就是我现在所使用的,它运行良好,只是好奇是否有一些我忽略的可用功能。感谢惊人的框架!
    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 2018-01-19
    • 1970-01-01
    • 2019-08-12
    • 2022-01-18
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多