首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

在django-admin中兑现动态form

2012-12-21 
在django-admin中实现动态form问题的提出:有如下models.py:class A(models.Model):user models.ForeignK

在django-admin中实现动态form

问题的提出:

有如下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()
?

不过这样的实现还是比较麻烦,还得再进行改进。

热点排行