wagtail_hooks.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from wagtail import hooks
  2. from wagtail.admin.userbar import AccessibilityItem
  3. from wagtail.contrib.modeladmin.options import (
  4. ModelAdmin,
  5. ModelAdminGroup,
  6. modeladmin_register,
  7. )
  8. from wagtail.snippets.models import register_snippet
  9. from wagtail.snippets.views.snippets import SnippetViewSet, SnippetViewSetGroup
  10. from bakerydemo.base.models import FooterText, Person
  11. from bakerydemo.breads.models import BreadIngredient, BreadType, Country
  12. """
  13. N.B. To see what icons are available for use in Wagtail menus and StreamField block types,
  14. enable the styleguide in settings:
  15. INSTALLED_APPS = (
  16. ...
  17. 'wagtail.contrib.styleguide',
  18. ...
  19. )
  20. or see https://thegrouchy.dev/general/2015/12/06/wagtail-streamfield-icons.html
  21. This demo project also includes the wagtail-font-awesome-svg package, allowing further icons to be
  22. installed as detailed here: https://github.com/allcaps/wagtail-font-awesome-svg#usage
  23. """
  24. @hooks.register("register_icons")
  25. def register_icons(icons):
  26. return icons + [
  27. "wagtailfontawesomesvg/solid/suitcase.svg",
  28. "wagtailfontawesomesvg/solid/utensils.svg",
  29. ]
  30. class CustomAccessibilityItem(AccessibilityItem):
  31. axe_run_only = None
  32. @hooks.register("construct_wagtail_userbar")
  33. def replace_userbar_accessibility_item(request, items):
  34. items[:] = [
  35. CustomAccessibilityItem() if isinstance(item, AccessibilityItem) else item
  36. for item in items
  37. ]
  38. class BreadIngredientAdmin(ModelAdmin):
  39. # These stub classes allow us to put various models into the custom "Wagtail Bakery" menu item
  40. # rather than under the default Snippets section.
  41. model = BreadIngredient
  42. search_fields = ("name",)
  43. inspect_view_enabled = True
  44. class BreadTypeAdmin(ModelAdmin):
  45. model = BreadType
  46. search_fields = ("title",)
  47. class BreadCountryAdmin(ModelAdmin):
  48. model = Country
  49. search_fields = ("title",)
  50. class BreadModelAdminGroup(ModelAdminGroup):
  51. menu_label = "Bread Categories"
  52. menu_icon = "suitcase" # change as required
  53. menu_order = 200 # will put in 3rd place (000 being 1st, 100 2nd)
  54. items = (BreadIngredientAdmin, BreadTypeAdmin, BreadCountryAdmin)
  55. class PersonViewSet(SnippetViewSet):
  56. model = Person
  57. menu_label = "People" # ditch this to use verbose_name_plural from model
  58. icon = "group" # change as required
  59. list_display = ("first_name", "last_name", "job_title", "thumb_image")
  60. list_filter = {
  61. "job_title": ["icontains"],
  62. }
  63. class FooterTextViewSet(SnippetViewSet):
  64. model = FooterText
  65. search_fields = ("body",)
  66. class BakerySnippetViewSetGroup(SnippetViewSetGroup):
  67. menu_label = "Bakery Misc"
  68. menu_icon = "utensils" # change as required
  69. menu_order = 300 # will put in 4th place (000 being 1st, 100 2nd)
  70. items = (PersonViewSet, FooterTextViewSet)
  71. # When using a ModelAdminGroup class to group several ModelAdmin classes together,
  72. # you only need to register the ModelAdminGroup class with Wagtail:
  73. modeladmin_register(BreadModelAdminGroup)
  74. register_snippet(BakerySnippetViewSetGroup)