Adding non-ModelAdmin views to a ModelAdminGroup

To add menu items to a ModelAdminGroup that are not managed by ModelAdmin, you can override the get_submenu_items method. For example, to add the calendar view described in Creating admin views alongside an EventAdmin modeladmin, you would do the following (in place of registering it through the register_admin_menu_item hook):

from django.urls import reverse
from wagtail.contrib.modeladmin.options import (
    ModelAdmin,
    modeladmin_register,
    ModelAdminGroup,
)
from wagtail.admin.menu import MenuItem


class EventAdmin(ModelAdmin):
    model = CalendarEvent
    menu_label = "Events"
    menu_icon = "date"
    menu_order = 200
    list_display = ('title', 'date')


class CalendarGroup(ModelAdminGroup):
    menu_label = "Calendar events"
    menu_icon = "folder-open-inverse"
    menu_order = 900
    items = (EventAdmin,)

    def get_submenu_items(self):
        menu_items = super().get_submenu_items()
        menu_items.append(
            MenuItem('Calendar', reverse('calendar'), icon_name='date'),
        )
        return menu_items

modeladmin_register(CalendarGroup)