I am trying to write a dynamic form for models that allow users with different permissions to do different things. I would like the code below to function correctly, so non-superusers cannot edit any of the fields in the Merchant block.
class CategoryModelAdmin(LWModelAdmin): fieldsets = ( ('Merchant', {'fields': ('merchant',) }), ('Category', { 'fields': ('name', 'parent',) }), ) def get_form(self,request,obj=None, **kwargs): if request.user.is_superuser: self.exclude = [] else: self.exclude = ['Merchant'] return super(CategoryModelAdmin,self).get_form(request, obj=None, **kwargs)
While I can achieve this effect using the code below, I'm really looking for the βrightβ way to do this, and it seems to me that using exclude is the way to go, but I cannot figure out that it is correct no matter what I try.
class CategoryModelAdmin(LWModelAdmin): declared_fieldsets = None admin_fieldsets = ( (None, {'fields': ('merchant',) }), ('Category', { 'fields': ('name', 'parent',) }), ) restricted_fieldsets = ( ('Category', { 'fields': ('name', 'parent',) }), ) def get_fieldsets(self, request, obj=None): if request.user.is_superuser: fieldsets = self.admin_fieldsets else: fieldsets = self.restricted_fieldsets return LWModelAdmin.fieldsets + fieldsets def get_form(self, request, obj=None, **kwargs): self.declared_fieldsets = self.get_fieldsets(request, obj) return super(self.__class__, self).get_form(request, obj)