Динамическое ограничение выбора обработчика редактирования трясогузки

Я хотел бы ограничить доступные варианты выбора поля в представлении редактирования 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()

Но где-то в процессе создания формы выбор снова переопределяется, и я не могу найти подходящее место, куда можно вставить пользовательский запрос.

Также просматривая вопросы по трясогузке, я смог найти только отдаленно связанный материал, и я задаюсь вопросом, являются ли мои планы экзотическими или я слишком долго сижу перед этой проблемой...

Вернуться на верх