Django admin 过滤数据 小结

最近时间在折腾Django,使用Django的主要原因是在于看中了其中的admin管理系统,其中好几处需要根据不同的账户过滤数据,现在总结一下:

1、models.Model过滤,根据用户过滤整个条目,只显示当前用户的内容,在admin.py的admin配置文件中:

    def queryset(self, request):
        qs = super(TaskAdmin, self).queryset(request)
        print qs[0].name
        if request.user.is_superuser:
            return qs
        return qs.filter(user=request.user)

该代码的作用:如果帐号是superuser的话,那么会显示所有的清单,但如果帐号不是superuser的话,则会只显示request.user的清单,此处 request.user就是登录的账户。

2、ManyToManyField过滤,主要是根据用户的不同,过滤model中的ManyToManyField ,只显示符合要求的内容

    def formfield_for_manytomany(self, db_field, request, **kwargs):

        permission = UserAreaPermission.objects.filter(user=request.user)
        if db_field.name == "area" and len(permission):
            kwargs['queryset'] = permission[0].area.all()
        if db_field.name == "equipmentType" and len(permission):
            kwargs['queryset'] = permission[0].equipment.all()

        return super(TaskAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

该代码同样放在自定义的admin配置类中,该代码作用是过滤area和equipmentType

About: happyhls


发表评论

电子邮件地址不会被公开。 必填项已用*标注