Dans django, j'ai des superutilisateurs et des éditeurs de groupes de contenu. Lorsque je modifie un modèle en tant que superutilisateur, je veux pouvoir modifier tous les champs. Et si quelqu'un s'est connecté en tant qu'éditeur, je veux lui permettre de ne modifier que des champs spécifiques.Afficher un modèle d'administration différent list_display et des champs définis pour différents groupes d'utilisateurs
Je l'ai fait avec get_form
méthode:
class VideoAdmin(admin.ModelAdmin):
editor_fields = ('description','description_rewrited')
def get_form(self, request, obj=None, **kwargs):
if not hasattr(request.user, 'perms_list'):
request.user.perms_list = request.user.groups.values_list('name',flat=True)
if 'video_description_rewriter' in request.user.perms_list:
print('rewrite fields to normal')
self.fields = self.normaluser_fields
return super(VideoAdmin, self).get_form(request, obj, **kwargs)
Il fonctionne pour moi. Mais quand j'ouvre la vidéo pour l'éditer en tant qu'éditeur normal cela change les champs de superutilisateur réglés aux ensembles de champs d'éditeurs.
- modèle Open admin comme super-utilisateur - http://joxi.ru/zAN5wWMIVjz429
- modèle Open admin comme éditeur - http://joxi.ru/p27LJPZiDNgeA7
- Maintenant super-utilisateur a les mêmes champs défini comme éditeur - http://joxi.ru/L21jko5TW0ydAX
Je suppose qu'il ya une sorte de mise en cache de modèle?