2016-06-30 10 views
1

私は、ユーザーの権限レベルに基づいてカスタマイズ可能なフィールドセットを使ってdjango管理ビューを作成しています。コードの繰り返しを減らすためにフィールドセットを整理する最善の方法は何ですか?Djangoフィールドセットを整理する最良の方法

現在、私はそれがこのように設定している2つの異なるフィールドセットのために:

standard_fieldsets = (
     (None, {'fields': ('email', 'password')}), 
     (_('Permissions'), { 
     'fields': ('is_staff', 'is_superuser', 'groups', 'permissions')}), 
     (_('Dates'), {'fields': ('last_login',)}), 
    ) 
perm1_fieldsets = (
     (None, {'fields': ('email', 'password')}), 
     (_('Dates'), {'fields': ('last_login',)}), 
    ) 

fieldsetのを組織の目標は、ここに見られるように、それらを選択することになります。

def get_fieldsets(self, request, obj=None): 
     if # user has permission 1: 
      self.fieldsets = self.perm1_fieldsets 
     else: 
      self.fieldsets = self.standard_fieldsets 

     if not obj: 
      return self.add_fieldsets 
     return super().get_fieldsets(request, obj) 

答えて

1

内部フィールドの場合フィールドセットは常に同じで、同じ順序で次のようにすることができます。

class SomeAdmin(admin.ModelAdmin): 
    fieldsets = { 
     'base': (None, {'fields': ('email', 'password')}), 
     'permissions': (
      _('Permissions'), { 
       'fields': ('is_staff', 'is_superuser', 'groups', 'permissions'), 
      }), 
     'dates': (_('Dates'), {'fields': ('last_login',)}), 
    } 
    add_fieldsets = ('base', 'permissions') 
    standard_fieldsets = add_fieldsets + ('dates',) 
    perm1_fieldsets = ('base', 'dates') 

    def get_fieldsets(self, request, obj=None): 
     if not obj: 
      fieldsets = self.add_fieldsets 
     elif user_has_permission(1): 
      fieldsets = self.perm1_fieldsets 
     else: 
      fieldsets = self.standard_fieldsets 
     return [self.fieldsets[x] for x in fieldsets] 
関連する問題