这些模式让我可以为一个工具建立多个人类 "编辑"。
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')
答案是作为原问题的更新,粘贴在下面,并附上一些文档链接。
你可以通过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。