微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

想在 django 中执行左连接

如何解决想在 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

我想找出今天不存在的三个用户

解决方法

您可以通过以下方式使用 .exclude(…) [Django-doc]

User.objects.exclude(attendance__date=today)

这将检索在 Attendance 字段等于 date 的情况下找不到 today 的所有用户。

,

这应该会为您提供 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)

这个措辞是我想要的......

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。