按日期获取具有多对一关系的多个 table 的最后一条记录

Get last record by date for multiple table with many-to-one relationship

我有 3 tables :

class Item(models.Model):
    def __str__(self):
        return self.name

    name = models.CharField(max_length=200, unique=True)
    image = models.URLField()

class Prix_x1(models.Model):
    def __str__(self):
        return self.item.name

    prix = models.IntegerField(null=True)
    saved_at = models.DateTimeField()
    item = models.ForeignKey(Item, on_delete=models.CASCADE)

class Prix_x10(models.Model):
    def __str__(self):
        return self.item.name

    prix = models.IntegerField(null=True)
    saved_at = models.DateTimeField()
    item = models.ForeignKey(Item, on_delete=models.CASCADE)

我想要的是为我的 BDD 中的每个项目分别检索最后价格 1 和 10。

我已经尝试了很多东西,但要么它没有给我我想要的,要么请求就像 20 秒

我想在 table 中显示结果,例如:

感谢您的帮助!

您可以使用子查询:

from django.db.models import OuterRef, Subquery

Item.objects.annotate(
    prix_x1=<b>Subquery(</b>
        Prix_x1.objects.filter(
            item=OuterRef('pk')
        ).values('prix').order_by('-saved_at')[:1]
    <b>)</b>,
    prix_x10=<b>Subquery(</b>
        Prix_x10.objects.filter(
            item=OuterRef('pk')
        ).values('prix').order_by('-saved_at')[:1]
    <b>)</b>
)

从这个查询集产生的 Item 将有两个额外的属性 .prix_x1.prix_x10 包含最后一个 Prix_x1prixPrix_x10 条与该项目相关的记录。