获取Django模型中外键的​​最新实例

时间:2020-07-27 01:28:00

标签: django django-models django-orm

嗨,我在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)

我想让所有在各自最近的出勤日期都在场的学生。

1 个答案:

答案 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))