问题的提出:
有如下models.py:
class A(models.Model): user = models.ForeignKey(User) name = models.CharField(max_length=10)
现在要在django-admin管理界面下进行输入:
1)如当前用户是管理员时,admin管理界面中要出现user这一栏,可以让管理员自由选择
2)如当前用户不是管理员时,admin管理界面中不出现user这一栏,直接指定user为当前用户
现在想到使用一种方法是利用多重继承,代码如下:
class DynamicExcludeMixin(object): dynamic_excludes = [] def preprocess_exclude(self,request): if not self.exclude: self.exclude = [] for dynamic_exlcude in self.dynamic_excludes: if dynamic_exlcude not in self.exclude: if not request.user.is_superuser: self.exclude.insert(1,dynamic_exlcude) else: if request.user.is_superuser: self.exclude.remove(dynamic_exclude) def add_view(self, request, form_url='', extra_context=None): self.preprocess_exclude(request) return super(DynamicExcludeMixin,self).add_view(request, form_url, extra_context) def change_view(self, request, object_id, extra_context=None): self.preprocess_exclude(request) return super(DynamicExcludeMixin,self).change_view(request, object_id, extra_context) class AAdmin(DynamicExcludeMixin,admin.ModelAdmin): dynamic_excludes = ['user',] def save_model(self,request,obj,form,change): if not change: if not request.user.is_superuser: obj.user = request.user obj.save()
不过这样的实现还是比较麻烦,还得再进行改进。