读书人

经过继承实现admin中记录级的权限控制

发布时间: 2012-12-25 16:18:28 作者: rapoo

通过继承实现admin中记录级的权限控制(二)

http://zjxplq.iteye.com/admin/blogs/925711

在具体的使用继承来实现admin来实现的记录级的权限控制中又遇到问题了,在使用admin.TabularInline时,就会发现它的save_model()不会调用。

解决方法如下:

?

from django.contrib import adminfrom app.models import *class AuthorMixin(object):    exclude = ('author',)        def get_model_class(self):        raise NotImplementedError         def queryset(self,request):        if request.user.is_superuser:            return self.get_model_class().objects.all()        return self.get_model_class().objects.filter(author=request.user)        def has_change_permission(self,request,obj=None):        has_class_permission = super(AuthorMixin, self).has_change_permission(request, obj)        if not has_class_permission:            return False        if obj is not None and not request.user.is_superuser and request.user.id != obj.author.id:            return False        return True        def save_model(self,request,obj,form,change):        if not change:            obj.author = request.user        obj.save()        print type(obj)            def save_formset(self, request,form,formset,change):        instances = formset.save(commit=False)                for instance in instances:            instance.author = request.user            instance.save()    class BAdminInline(AuthorMixin,admin.TabularInline):    model = B        def get_model_class(self):        return B    class AAdmin(AuthorMixin,admin.ModelAdmin):    inlines = [BAdminInline,]        def get_model_class(self):        return A    class BAdmin(AuthorMixin,admin.ModelAdmin):    def get_model_class(self):        return B admin.site.register(A,AAdmin)admin.site.register(B,BAdmin)

?这样的话不管是在ModelAdmin,还是在TabularInline使用都正常实现功能

读书人网 >编程

热点推荐