django去重


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()

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM