您现在的位置是: 网站首页 >Django Django

Django查询集去重或运算和distinct()方式

admin2019年1月6日 11:26 Django 214人已围观

# Django查询集去重 ## 使用.distinct() ```python # 学习该课程的用户,首先获取该课程在UserCourse对应关系,然后查询UserCourse表中的所有用户,使用distinct()去重 user_courses = UserCourse.objects.filter(course=course) print(user_courses) user_courses = user_courses.values('user__nick_name', 'user__username', 'user__image').distinct() print(user_courses) ``` 得到结果 ```python <QuerySet [<UserCourse: admin 学习 Django入门基础>, <UserCourse: user 学习 Django入门基础>, <UserCourse: admin 学习 Django入门基础>]> <QuerySet [{'user__nick_name': 'LR', 'user__username': 'admin', 'user__image': 'image/2018/08/admin头像.jpg'}, {'user__nick_name': 'user', 'user__username': 'user', 'user__image': 'image/default.png'}]> ``` ## 使用|或运算符 - 用户和权限多对多管理 - 用户和组多对多关系 - 组和权限多对多管理 - 要得到用户的权限,需要得到自己的权限,然后得到它的所有组的权限 - 把这些权限合并去重得到用户最终的权限 ```python # 获取用户自己的权限查询集 user_permission = user_obj.permission.all() if user_obj.group.all(): for group in user_obj.group.all(): # 获取用户某个组的权限查询集 group_permission = group.permission.all() # 将用户权限查询集和用户组权限查询集合并去重 user_permission = set(user_permission) | set(group_permission) # 使用或运算符 print('用户{}({})权限查询集:{}'.format(user_obj.nickname, user_obj.username, user_permission)) # 一般情况下就可以完全去重,如果发现还不行,再使用.distinct() user_permission = user_permission.values('name', 'alias').distinct() ```

很赞哦! (0)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行588天
  • 系统信息:Linux
  • 后台程序:Python: 3.6.6
  • 网站框架:Django: 2.2.9
  • 文章统计:222 篇
  • 文章评论:40 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 微信公众号:扫描二维码,关注我们
返回
顶部
标题 换行 登录
网站