2013-10-22 3 views
0

request 개체에 따라 admin-formadmin-fieldsets이 필요합니까? 예를 들어 : 나는 관리자 인터페이스 defferent의 필드 셋에 들어갈 user.profile.role의 따라 원하는 요청에 따라 다른 필드 세트 및 관리자 양식

# models.py 
class Shop(models.Model): 
    name = models.CharField(...) 
    description = models.TextField(...) 
    params = models.SomeField(...) 

그리고 난 (administrator, ownerseller를) roleuser.profile에 필드가 :

나는 몇 가지 모델을 가지고 예를 들면 다음과 같습니다.

# admin.py 
class ShopAdmin(admin.ModelAdmin): 

    def custom_get_fieldset_and_form_method(self, request, *args, **kwargs): 
     if request.user.profile.role == 'administator': 
      self.fieldsets = self.get_default_fieldset_method(self, *args, **kwargs) 
     elif request.user.profile.role == 'owner': 
      self.fieldsets = [ 
      (
       'Owner Panel', {'fields': ('name', 'description')}, 
      ), 
      (
       'Hidden fields', {'classes':('collapse',),'fields': (`params`,)}, 
      )] 
     else: 
      # in other, i want to hide `params` field from form 

답변

2

인수의 하나로서 request 객체를 수신 모델 관리자의방법 : 당신이 /가 포함 사용자 프로필에 따라 특정 분야를 제외하고자하는 경우

# NOT TESTED 
class ShopAdmin(admin.ModelAdmin): 
    def get_fieldsets(self, request, obj=None): 
     profile = YourProfileModel.objects.get(user=request.user) 

     if profile.role == 'administrator': 
      fieldsets = self.get_fieldsets(request, obj) 
     elif profile == 'owner': 
      fieldsets = (
       ('Owner Panel', {'fields': ('name', 'description',)}), 
       ('Hidden fields', {'classes':('collapse',),'fields': ('params',)}) 
      ) 
     else: 
      # additional fieldsets 

     return fieldsets 

, 당신은 오버라이드 (override) 할 필요가 모델 관리자의 get_form() 메서드를 호출하면 요청에 대한 액세스 권한이 부여됩니다.

관련 문제