2011-07-05 26 views
7

Kullanıcı düzenleme sayfasındaki izinler listesini değiştirme olasılığı var mı? Örnek yönetici günlüğü girdisi veya kimlik doğrulama grubu vb. Için tüm izinleri göstermem. Bazıları hariç tutmak için bir ana sorgulamayı nasıl değiştirebilirim?Django admin - izin listesini değiştir

cevap

9

Sorunuzu yanıtlayan this topic numaralı fikri de aldım, ancak bu net değil.

Görselleştirme için kullanılan UserAdmin formundaki kullanıcı izinleri sorgu nesnesinin üzerine yazmanız gerekir. ne istersen için Kendi sorgu kümesi içinde filtreyi değiştirebilir

from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 

class MyUserAdmin(UserAdmin): 
    def get_form(self, request, obj=None, **kwargs): 
     # Get form from original UserAdmin. 
     form = super(MyUserAdmin, self).get_form(request, obj, **kwargs) 
     if 'user_permissions' in form.base_fields: 
      permissions = form.base_fields['user_permissions'] 
      permissions.queryset = permissions.queryset.filter(content_type__name='log entry') 
     return form 

: Örnekler:

Bunu yapmak için

, en kolay yolu get_form yöntemi UserAdmin bir alt sınıfını oluşturup üzerine yazılmasıdır

: Eğer sınıf oluşturduktan sonra
# Exclude admin and auth.  
permissions.queryset = permissions.queryset.exclude(content_type__app_label__in=['admin', 'auth']) 

# Only view permissions of desired models (Can be your models or Django's) 
permissions.queryset = permissions.queryset.filter(content_type__model__in=['blog', 'post', 'user', 'group']) 

, yeni oluşturulan Yönetici ile Kullanıcı modelini kaydetmek zorunda

Düzenleme: Maik Hoepfel'dan yorum ekledim, çünkü bu kod yeni kullanıcı oluşturulurken django çöktü.


Sen Grup düzenleme sayfasında izin listesi ile aynı şeyi, ancak GroupAdmin uzanan başka Yönetici oluşturmak ve form.base_fields['permissions']

4

Renato cevap form.base_fields['user_permissions'] değiştirmek zorunda neredeyse mükemmel. Django Yöneticisi, kullanıcıya aynı formda iki adımlı bir işlem eklemeyi ve kodunun ilk adımda 'user_permissions' için bir KeyError ile başarısız olmasını sağlar.

düzeltme, yeterince kolaydır hemen altında yerine kodu kullanın:

def get_form(self, request, obj=None, **kwargs): 
    form = super(MyUserAdmin, self).get_form(request, obj, **kwargs) 
    # adding a User via the Admin doesn't include the permissions at first 
    if 'user_permissions' in form.base_fields: 
     permissions = form.base_fields['user_permissions'] 
     permissions.queryset = permissions.queryset.filter(content_type__name='log entry') 
    return form