Django根据另一个模型中最后一个数据的字段值过滤对象

Django filter objects based on the value of a field of the last data in another model

有2个模型

class A(models.Model): name = models.TextField()

class B(models.Model): a = models.ForeignKey(A) status = models.BooleanField(default=False)

现在我想根据class B状态中的最后数据过滤class A的对象。

如果模型B有2个数据

id | a | status 1 | a | True 2 | abc | False 3 | a | False 4 | abc | True

因此,如果我想过滤状态为 False 的模型 A 的对象。 在这种情况下,它会给我

a.

如果我想过滤模型 A 中状态为 True 的对象。 在这种情况下它应该 return 我 abc.

我想写一个类似于

的查询

A.objects.filter(b__status__last=True)

是否可以使用过滤器?

请尝试:

from django.db.models import Max, F

A.objects.annotate(latest=Max('b__id')).filter(b__id=F('latest'),b__status=True)

我认为你可以在这里有效地使用注释。

A.objects.annotate(latest_b=Max("b__created_at")).filter(b__status=True).latest('latest_b')

在这里,我们将 A 的每个对象注释为具有一个 latest_by 字段,然后在按 b 的状态过滤后获取最新的对象。这应该可以正常工作。