kopia lustrzana https://github.com/wagtail/wagtail
Add add_to_admin_menu option for modeladmin (#8634)
rodzic
db7a0c96e3
commit
97d0d14cd8
|
@ -97,6 +97,7 @@ This lets you use Wagtail-specific layouts in an otherwise traditional Django mo
|
|||
menu_order = 200 # will put in 3rd place (000 being 1st, 100 2nd)
|
||||
add_to_settings_menu = False # or True to add your model to the Settings sub-menu
|
||||
exclude_from_explorer = False # or True to exclude pages of this type from Wagtail's explorer view
|
||||
add_to_admin_menu = True # or False to exclude your model from the menu
|
||||
list_display = ('title', 'author')
|
||||
list_filter = ('author',)
|
||||
search_fields = ('title', 'author')
|
||||
|
|
|
@ -46,3 +46,9 @@ Wagtail's 'Explorer' menu item has an order value of `100`, so supply a value gr
|
|||
If you'd like the menu item for your model to appear in Wagtail's 'Settings' sub-menu instead of at the top level, add `add_to_settings_menu = True` to your `ModelAdmin` class.
|
||||
|
||||
This will only work for individual `ModelAdmin` classes registered with their own `modeladmin_register` call. It won't work for members of a `ModelAdminGroup`.
|
||||
|
||||
## `ModelAdmin.add_to_admin_menu`
|
||||
|
||||
**Expected value**: `True` or `False`
|
||||
|
||||
If you'd like this model admin to be excluded from the menu, set to `False`.
|
||||
|
|
|
@ -43,9 +43,15 @@ class TestHome(TestCase, WagtailTestUtils):
|
|||
# Check that the explorer menu item is here, with the right start page.
|
||||
self.assertContains(
|
||||
response,
|
||||
'{"name": "explorer", "label": "Pages", "icon_name": "folder-open-inverse", "classnames": "", "url": "/admin/pages/", "attrs": null}, 1]',
|
||||
'[{"name": "explorer", "label": "Pages", "icon_name": "folder-open-inverse", "classnames": "", "url": "/admin/pages/", "attrs": null}, 1]',
|
||||
)
|
||||
|
||||
# There should be a link to the friend admin in on the home page.
|
||||
self.assertContains(response, '"url": "/admin/friendadmin/"')
|
||||
|
||||
# Since we've marked this as not being shown, it shouldn't be shown.
|
||||
self.assertNotContains(response, '"url": "/admin/enemyadmin/"')
|
||||
|
||||
# check that is_shown is respected on menu items
|
||||
response = self.client.get(reverse("wagtailadmin_home") + "?hide-kittens=true")
|
||||
self.assertNotContains(
|
||||
|
|
|
@ -47,6 +47,7 @@ class WagtailRegisterable:
|
|||
"""
|
||||
|
||||
add_to_settings_menu = False
|
||||
add_to_admin_menu = True
|
||||
exclude_from_explorer = False
|
||||
|
||||
def register_with_wagtail(self):
|
||||
|
@ -58,15 +59,18 @@ class WagtailRegisterable:
|
|||
def register_admin_urls():
|
||||
return self.get_admin_urls_for_registration()
|
||||
|
||||
menu_hook = (
|
||||
"register_settings_menu_item"
|
||||
if self.add_to_settings_menu
|
||||
else "register_admin_menu_item"
|
||||
)
|
||||
if self.add_to_settings_menu:
|
||||
menu_hook = "register_settings_menu_item"
|
||||
elif self.add_to_admin_menu:
|
||||
menu_hook = "register_admin_menu_item"
|
||||
else:
|
||||
menu_hook = None
|
||||
|
||||
@hooks.register(menu_hook)
|
||||
def register_admin_menu_item():
|
||||
return self.get_menu_item()
|
||||
if menu_hook:
|
||||
|
||||
@hooks.register(menu_hook)
|
||||
def register_admin_menu_item():
|
||||
return self.get_menu_item()
|
||||
|
||||
# Overriding the explorer page queryset is a somewhat 'niche' / experimental
|
||||
# operation, so only attach that hook if we specifically opt into it
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# Generated by Django 4.0.4 on 2022-05-31 18:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("modeladmintest", "0010_translatablebook"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="Enemy",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("first_name", models.CharField(max_length=255)),
|
||||
("last_name", models.CharField(max_length=255)),
|
||||
("phone_number", models.CharField(max_length=255)),
|
||||
("address", models.CharField(max_length=255)),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -156,6 +156,15 @@ class Friend(models.Model):
|
|||
return self.first_name
|
||||
|
||||
|
||||
class Enemy(models.Model):
|
||||
"""model used to test add_to_admin_menu usage in ModelAdminMenuItem"""
|
||||
|
||||
first_name = models.CharField(max_length=255)
|
||||
last_name = models.CharField(max_length=255)
|
||||
phone_number = models.CharField(max_length=255)
|
||||
address = models.CharField(max_length=255)
|
||||
|
||||
|
||||
class RelatedLink(models.Model):
|
||||
title = models.CharField(
|
||||
max_length=255,
|
||||
|
|
|
@ -15,6 +15,7 @@ from .models import (
|
|||
Author,
|
||||
Book,
|
||||
Contributor,
|
||||
Enemy,
|
||||
Friend,
|
||||
Person,
|
||||
Publisher,
|
||||
|
@ -198,6 +199,13 @@ class PageAdmin(ModelAdmin):
|
|||
menu_label = "Page"
|
||||
|
||||
|
||||
class EnemyAdmin(ModelAdmin):
|
||||
model = Enemy
|
||||
add_to_admin_menu = False
|
||||
menu_icon = "snippet"
|
||||
base_url_path = "enemyadmin"
|
||||
|
||||
|
||||
modeladmin_register(AuthorModelAdmin)
|
||||
modeladmin_register(BookModelAdmin)
|
||||
modeladmin_register(TranslatableBookModelAdmin)
|
||||
|
@ -211,3 +219,4 @@ modeladmin_register(VisitorAdmin)
|
|||
modeladmin_register(ContributorAdmin)
|
||||
modeladmin_register(RelatedLinkAdmin)
|
||||
modeladmin_register(PageAdmin)
|
||||
modeladmin_register(EnemyAdmin)
|
||||
|
|
Ładowanie…
Reference in New Issue