想在 django 中执行左连接
Want to perform left join in django
假设我有 2 个模型
Model Users:
Name:
Id:
和出勤率
Model Attendance:
user: foreign_key(User)
present: [present if login else nothing recorded]
Date:
users = User.objects.all()
todays_present = Attendance.objects.filter(date=today)
现在举例
用户 = 10
todays_present = 7
我想找出哪三个用户不在todays_present.
您可以与 .exclude(…)
[Django-doc] 合作:
User.objects.exclude(<b>attendance__date=today</b>)
这将检索在 date
字段等于 today
的情况下找不到 Attendance
的所有用户。
这应该会为您提供不属于 today
的实际用户对象(尽管 Willem Van Onsem 的解决方案更简单)。
您可能需要根据您的实际型号相关名称进行调整'attendance_set'
。
users_not_present_today = User.objects.annotate(
today_attendance_count=Count('attendance_set', filter=Q(present=True, date=today)
).filter(today_attendance_count=0)
首先要感谢@willem 和@AKX 这两个家伙,是他们让我朝着正确的方向思考。
我所做的是,首先让所有在职员工
presents = Attendance.objects.filter(date=today)
然后将它们从所有用户中排除,例如:
absent = User.objects.exclude(attendance_set__in=presents)
这个措辞是我想要的...
假设我有 2 个模型
Model Users:
Name:
Id:
和出勤率
Model Attendance:
user: foreign_key(User)
present: [present if login else nothing recorded]
Date:
users = User.objects.all()
todays_present = Attendance.objects.filter(date=today)
现在举例 用户 = 10 todays_present = 7
我想找出哪三个用户不在todays_present.
您可以与 .exclude(…)
[Django-doc] 合作:
User.objects.exclude(<b>attendance__date=today</b>)
这将检索在 date
字段等于 today
的情况下找不到 Attendance
的所有用户。
这应该会为您提供不属于 today
的实际用户对象(尽管 Willem Van Onsem 的解决方案更简单)。
您可能需要根据您的实际型号相关名称进行调整'attendance_set'
。
users_not_present_today = User.objects.annotate(
today_attendance_count=Count('attendance_set', filter=Q(present=True, date=today)
).filter(today_attendance_count=0)
首先要感谢@willem 和@AKX 这两个家伙,是他们让我朝着正确的方向思考。
我所做的是,首先让所有在职员工
presents = Attendance.objects.filter(date=today)
然后将它们从所有用户中排除,例如:
absent = User.objects.exclude(attendance_set__in=presents)
这个措辞是我想要的...