Администратор Django - как скрыть некоторые поля в редакторе пользователя? - PullRequest
3 голосов
/ 05 июля 2011

Как я могу скрыть поля в редакторе пользователя? В основном я хочу скрыть разрешения и выбор групп в некоторых исключениях, но переменная exclude не работает: /

Ответы [ 2 ]

9 голосов
/ 21 марта 2012

Я могу опоздать, чтобы ответить на этот вопрос, но в любом случае, здесь идет. Джон прав в концепции, но я просто хотел сделать это, потому что я знаю, django admin действительно гибок.

Любой способ скрыть поля в форме модели пользователя:

1. exclude атрибут класса ModelAdmin может использоваться для скрытия полей.

2: Должен быть разрешен пробел в модели.

3: default атрибут в поле модели является преимуществом, иначе вы можете получить непредвиденные ошибки.

У меня были проблемы с тем, что я получал ошибку проверки. Я посмотрел на след назад и обнаружил, что ошибка произошла из-за группировки UserAdmin fieldsets, набор полей по умолчанию permission имеет user_permission переопределить это в администраторе вашей подкалассированной модели.

Используйте атрибут exclude в get_form, где вы можете получить доступ к переменной request, и вы можете установить ее динамически в зависимости от разрешения пользователя или группы.

Код:

admin.py:

class MyUserAdmin(UserAdmin): 

     list_display = ("username","first_name", "last_name", "email","is_active","is_staff","last_login","date_joined")

     ## Static overriding 
     fieldsets = (
         (None, {'fields': ('username', 'password')}),
         (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
         (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                    'groups')}),
     (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
     )


     def get_form(self, request, obj=None, **kwargs):
         self.exclude = ("user_permissions")
         ## Dynamically overriding
         self.fieldsets[2][1]["fields"] = ('is_active', 'is_staff','is_superuser','groups')
         form = super(MyUserAdmin,self).get_form(request, obj, **kwargs)
         return form
0 голосов
/ 05 июля 2011

Администратор django не предназначен для очень тонкого контроля, поэтому они не являются автоматическими переменными, предназначенными для этого типа управления.

Если вам нужен этот тип контроля, вам придется использовать его самостоятельно. Вам нужно будет переопределить шаблоны администратора по умолчанию. Возможно, вы захотите использовать систему разрешений, чтобы отслеживать, что пользователям разрешено делать.

Имейте в виду уровень настройки, которую вы делаете. В какой-то момент работа, выходящая далеко за пределы предполагаемой цели и ограничений приложения администратора, будет более трудоемкой, чем простое развертывание собственной более мелкозернистой системы CRUD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...