from wagtail.admin.forms import WagtailAdminPageForm from shared.forms import ArticlesPageForm as SharedArticlesPageForm class UniwebHomePageAdminForm(WagtailAdminPageForm): def clean(self): cleaned_data = super().clean() # If one logo is set, then both logos must be set. if (cleaned_data["dark_logo"] or cleaned_data["light_logo"]) and ( not cleaned_data["dark_logo"] or not cleaned_data["light_logo"] ): self.add_error( "dark_logo", "Pokud je jedno logo nastaveno, musí být obě loga nastaveny.", ) self.add_error( "light_logo", "Pokud je jedno logo nastaveno, musí být obě loga nastaveny.", ) class UniwebArticlesPageForm(SharedArticlesPageForm, WagtailAdminPageForm): def __init__(self, *args, **kwargs): from shared.models import SharedTag from .models import UniwebArticleTag super().__init__(*args, **kwargs) self.fields["shared_tags"].queryset = SharedTag.objects.order_by("name") if self.instance.pk: valid_tag_ids = ( UniwebArticleTag.objects.filter( content_object__in=self.instance.get_children().specific() ) .values_list("id", flat=True) .distinct() ) valid_shared_tag_ids = ( self.instance.shared_tags.values_list("id", flat=True).distinct().all() ) self.fields["displayed_tags"].queryset = ( UniwebArticleTag.objects.filter(id__in=valid_tag_ids) .order_by("tag__name") .distinct("tag__name") ) self.fields["displayed_shared_tags"].queryset = ( SharedTag.objects.filter(id__in=valid_shared_tag_ids) .order_by("name") .distinct("name") ) else: self.fields["displayed_tags"].queryset = UniwebArticleTag.objects.filter( id=-1 ) self.fields["displayed_shared_tags"].queryset = SharedTag.objects.filter( id=-1 )