Wagtail: 过滤InlinePanel ForeignKey的结果。

问题描述 投票:5回答:1

这些模式让我可以为一个工具建立多个人类 "编辑"。

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 实例是一个有超过3000个用户的下拉菜单。我想把下拉菜单的内容限制在某个组中。我知道如何在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')
django wagtail
1个回答
0
投票

答案是作为原问题的更新,粘贴在下面,并附上一些文档链接。

你可以通过kwarg来限制一个Django模型的外键关系的可用选择。limit_choices_to.

注意:这将为关系添加一个限制,而不仅仅是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.ioenlatestreferencepagespanels.html#inline-panels。

© www.soinside.com 2019 - 2024. All rights reserved.