Wagtail:过滤InlinePanel ForeignKey的结果

时间:2016-11-11 18:40:03

标签: django wagtail

这些模型允许我为工具建立多个人类“编辑器”:

class ToolPageEditors(models.Model):
    person = models.ForeignKey('people.UserProfile')
    page = ParentalKey('ToolPage', related_name='toolpage_editors')


class ToolPage(BaseAsset):
    content_panels = BaseAsset.content_panels + [
        InlinePanel('toolpage_editors', label="Tool Editors")
    ]

但是,每个ToolPageEditors实例都是超过3,000个用户的下拉列表。我想将该下拉列表的内容限制在给定组中的人员。我知道如何通过覆盖管理表单在Django中执行此操作,但我很难弄清楚如何在Wagtail中完成它。

连连呢?感谢。

更新

关键是limit_choices_to。修改了类如下,它的工作原理:

class ToolPageManagers(models.Model):
    def get_tool_editors():
        g = Group.objects.get(name='Tool Editors')
        return {'groups__in': [g, ]}

    person = models.ForeignKey('people.UserProfile',  limit_choices_to=get_tool_editors)
    page = ParentalKey('ToolPage', related_name='toolpage_editors')

1 个答案:

答案 0 :(得分:1)

答案是对原始问题的更新,并粘贴了一些文档链接。

您可以通过kwarg limit_choices_to来限制Django模型的外键关系上的可用选择。

注意:这将增加关系的限制,而不仅仅是UI中可用的选择。

示例代码

class ToolPageManagers(models.Model):
    def get_tool_editors():
        g = Group.objects.get(name='Tool Editors')
        return {'groups__in': [g, ]}

    person = models.ForeignKey('people.UserProfile',  limit_choices_to=get_tool_editors)
    page = ParentalKey('ToolPage', related_name='toolpage_editors')

有关Wagtail InlinePanel的更多信息,请参见Wagtail文档-https://docs.wagtail.io/en/latest/reference/pages/panels.html#inline-panels