Я нашел два разных решения этого вопроса.
- Реализация ModelAdmin для создания настраиваемого представления списка страниц вашей модели. Это позволяет вам создать совершенно новый пункт меню администратора и соответствующий вид списка. Этот метод более сложен, но предлагает больше контроля.
- Реализация construct_explorer_page_queryset административного хука для получения результатов по группам по группам. Этот метод быстр и прост в реализации и позволяет использовать существующий проводник Wagtails.
Я расскажу, как я справился с каждым из вышеперечисленных методов Оба сработали, это вопрос выбора, предпочитаю ли я использовать трясогузки, встроенные в проводник страниц.
Метод 1: ModelAdmin
Использование ModelAdmin.get_queryset () и других полезных методов было найдено в Документах по трясогузке здесь .
Согласно этой странице в документах по трясогузке, я добавил ModelAdmin в INSTALLED_APPS:
# base.py settings
INSTALLED_APPS = [
...
'wagtail.contrib.modeladmin',
]
Затем я создал файл с именем wagtail_hooks.py в своем приложении article. В этот файл я добавил код для создания моей страницы со списком статей в админке:
# wagtail_hooks.py
from wagtail.contrib.modeladmin.options import (ModelAdmin, modeladmin_register)
from .models import Article
class ArticleAdmin(ModelAdmin):
model = Article
menu_label = 'Articles'
menu_icon = 'doc-full-inverse'
menu_order = 000
add_to_settings_menu = False
exclude_from_explorer = False
list_display = ('title', 'owner')
search_fields = ('title', 'owner')
def get_queryset(self, request):
qs = super().get_queryset(request)
#only show articles from the current user
return qs.filter(owner=request.user)
modeladmin_register(ArticleAdmin)
Они использовали здесь для реализации ModelAdmin.get_queryset () , который позволил мне отфильтровать владельца статей.
Вы также, вероятно, захотите удалить пункт меню Page explorer, поскольку он немного избыточен. Я также рекомендую реализовать метод 2 ниже. Даже если вы удалите пункт меню Page explorer, пользователь может попасть туда, введя URL-адрес непосредственно в браузере. Если они это сделают, реализация Метода 2 обеспечит не видеть контент, созданный другими пользователями.
Метод 2: construct_explorer_page_queryset @ hooks
Информация о хуке в документации Wagtail - construct_explorer_page_queryset
Также упоминается эта статья в группах Google - https://groups.google.com/forum/#!topic/wagtail/10tcq8PB8io
В тот же файл wagtail_hooks.py, который я создал выше, я добавил этот код:
@hooks.register('construct_explorer_page_queryset')
def show_authors_only_their_articles(parent_page, pages, request):
user_group = request.user.groups.filter(name='Author').exists()
if user_group:
pages = pages.filter(owner=request.user)
return pages
Вот и все для второго метода.