Django查詢集去重
使用.distinct()
# 學習該課程的用戶,首先獲取該課程在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)
得到結果
<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'}]>
使用|或運算符
- 用戶和權限多對多管理
- 用戶和組多對多關系
- 組和權限多對多管理
- 要得到用戶的權限,需要得到自己的權限,然后得到它的所有組的權限
- 把這些權限合並去重得到用戶最終的權限
# 獲取用戶自己的權限查詢集 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()