Трясогузка: результаты фильтрации InlinePanel ForeignKey

Эти модели позволяют мне установить несколько человеческих «редакторов» для инструмента:

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')

person shacker    schedule 11.11.2016    source источник


Ответы (1)


Ответ был помещен как обновление исходного вопроса, вставленного ниже с некоторыми ссылками на документы.

Вы можете ограничить доступные варианты отношения внешнего ключа модели Django с помощью kwarg 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')

Дополнительную информацию о InlinePanel трясогузки см. в документации по трясогузке — https://docs.wagtail.io/en/latest/reference/pages/panels.html#inline-panels

person LB Ben Johnston    schedule 01.05.2020