嗨,我在Django ORM中遇到查询困难:
我有两个模型:
class Student(models.Model):
name = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class choices:
CHOICES = {(0, "Present"),(1, "Absent")}
class Attendance(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE,
related_name='attendance')
date = models.DateField()
state = models.PositiveSmallIntegerField(choices=choices.CHOICES)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
我想让所有在各自最近的出勤日期都在场的学生。
答案 0 :(得分:0)
我有一个需要三个独立的数据库查询的解决方案
首先获取每个学生的最新Attendance
ID,然后获取存在状态的最新Attendance
ID。
latest_attendances = Attendance.objects.order_by('student', '-date').distinct('student').values_list('id', flat=True)
latest_present_attendances = latest_attendances.filter(state=0)
使用set
算法,我们可以获得所有Attendance
共同的ID(最新的和“现在的”)
set(latest_attendances) & set(latest_present_attendances)
然后将其传递给Student
查询
Student.objects.filter(attendance__in=set(latest_attendances) & set(latest_present_attendances))