Динамическое ограничение выбора обработчика редактирования трясогузки
Я хотел бы ограничить доступные варианты выбора поля в представлении редактирования Wagtail-Admin. Моя версия Wagtail - 2.16.3.
В моем случае, если есть модель страницы, которая описывает категории товаров. Для каждой категории может существовать несколько тегов.
Существует другая модель страницы, которая описывает конкретные изделия и всегда является подстраницей страницы категории.
Теперь продукт может быть описан с помощью некоторых тегов, но только теги, которые принадлежат категории продукта, имеют смысл, поэтому я хотел бы ограничить обработчик редактирования продуктов этими тегами.
Моя models.py
выглядит примерно так:
class ProductTag(ClusterableModel):
name = models.CharField(_("Name"), max_length=50)
category = ParentalKey(
"ProductCategoryIndexPage", related_name="tags", on_delete=models.CASCADE
)
class ProductPage(Page):
parent_page_types = ["products.ProductCategoryIndexPage"]
tags = ParentalManyToManyField("ProductTag", related_name="products")
content_panels = Page.content_panels + [
FieldPanel("tags", widget=widgets.CheckboxSelectMultiple()),
]
class ProductCategoryIndexPage(Page):
subpage_types = ["products.ProductPage"]
content_panels = Page.content_panels + [
MultiFieldPanel(
[InlinePanel("tags", label="Tags")],
heading=_("Produkt Tags"),
),
]
Мой подход заключался в том, чтобы создать пользовательский обработчик редактирования и внедрить wigdet, переопределив метод on_instance_bound
, используя правильный choices
аргумент для виджета.
class ProductTagEditPanel(FieldPanel):
def on_instance_bound(self):
self.widget = widgets.CheckboxSelectMultiple(
# of_product is a custom manager method, returning only the tags, that belong to the product's category
choices=ProductTag.objects.of_product(self.instance)
)
return super().on_instance_bound()
Но где-то в процессе создания формы выбор снова переопределяется, и я не могу найти подходящее место, куда можно вставить пользовательский запрос.
Также просматривая вопросы по трясогузке, я смог найти только отдаленно связанный материал, и я задаюсь вопросом, являются ли мои планы экзотическими или я слишком долго сижу перед этой проблемой...