Трясогузка Модель Admin. Несколько разделов для пользователя
Я пытаюсь настроить Wagtail для существующей пользовательской модели. В соответствии с требованиями должно быть доступно несколько страниц пользователя, представляющих разных типов пользователей (Regular, Manager и т. Д.). Я попытался создать отдельный ModelAdmin для каждого случая, переопределив get_queryset для фильтрации по типу пользователя. Но похоже, что все они показывают первое определение ModelAdmin, так как все они имеют модель - Пользователь
Затем я попытался использовать модель Proxy, в этом случае дисплей вообще не отображается, так как Wagtail, по-видимому, не поддерживает модели прокси.
Единственный вариант, который я вижу сейчас, - это сделать свои собственные представления и добавить элементы меню, ведущие к нему.
Посоветуйте, пожалуйста, как лучше / проще всего добиться этого в трясогузке
3 ответа
Wagtail Admin на самом деле работает с прокси-моделями. Недостающая часть заключалась в том, что раздел разрешений Wagtail не включает в себя прокси-модели, поэтому вы должны добавить его вручную
из wagtail.contrib.modeladmin.helpers import PermissionHelper
Класс ProxyModelPermissionHelper(PermissionHelper): def user_can_list(self, user): вернуть True
и в ModelAdmin:mission_helper_class = ProxyModelPermissionHelper
Wagtail 2.5 теперь поддерживает Django 2.2, а Django 2.2 теперь создает разрешения для прокси-моделей, используя тип контента прокси-модели, а не тип контента конкретной модели. В настоящее время Wagtail не поддерживает настройку разрешений моделей прокси в администраторе Wagtail, но если вы обновите Wagtail до версии 2.5/Django 2.2, вы можете установить групповые разрешения для моделей прокси с помощью администратора Django, и вы можете без permission_helper_class
необходимо.
Я назначал права пользователей для групп и, вопреки обсуждению в приведенной ниже проблеме Github, с удивлением увидел, что все модели прокси появились правильно после обновления Wagtail 2.5/Django 2.2 (см. Эту проблему Github и комментарий о том, что это, вероятно, произошло потому, что модели прокси зарегистрированы в ModelAdmin
). Я подтвердил, что прокси-модели должны быть зарегистрированы в ModelAdmin
для того, чтобы появиться на экране разрешений групп.
Не забудь бежать migrate
после обновления до Django 2.2, поскольку существует миграция, которая перенесет любые существующие разрешения модели прокси, переключив тип контента с базовой модели на модель прокси.
Чтобы получить правильные разрешения при доступе к моделям через SnippetViewSet, вы можете использовать этот крючок
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from .models import MyModel
@hooks.register("register_permissions")
def register_ctf_permissions():
model = MyModel
content_type = ContentType.objects.get_for_model(model, for_concrete_model=False)
return Permission.objects.filter(content_type=content_type)