forms.py 882 B

1234567891011121314151617181920212223242526272829
  1. from django import forms
  2. from django.utils.translation import gettext as _
  3. from wagtail.models import Page
  4. class PageChoiceField(forms.ModelChoiceField):
  5. def label_from_instance(self, obj):
  6. bits = []
  7. for ancestor in (
  8. obj.get_ancestors(inclusive=True).exclude(depth=1).specific(defer=True)
  9. ):
  10. bits.append(ancestor.get_admin_display_title())
  11. return " | ".join(bits)
  12. class ParentChooserForm(forms.Form):
  13. parent_page = PageChoiceField(
  14. label=_("Parent page"),
  15. required=True,
  16. empty_label=None,
  17. queryset=Page.objects.none(),
  18. widget=forms.RadioSelect(),
  19. )
  20. def __init__(self, valid_parents_qs, *args, **kwargs):
  21. self.valid_parents_qs = valid_parents_qs
  22. super().__init__(*args, **kwargs)
  23. self.fields["parent_page"].queryset = self.valid_parents_qs