Python 3.x 按日期获取具有多对一关系的多个表的最后记录

Python 3.x 按日期获取具有多对一关系的多个表的最后记录,python-3.x,django,django-models,orm,Python 3.x,Django,Django Models,Orm,我有三张桌子: 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.na

我有三张桌子:

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秒

我想在如下表格中显示结果:


谢谢你的帮助

您可以使用子查询:

from django.db.models import OuterRef, Subquery

Item.objects.annotate(
    prix_x1=Subquery(
        Prix_x1.objects.filter(
            item=OuterRef('pk')
        ).values('prix').order_by('-saved_at')[:1]
    ),
    prix_x10=Subquery(
        Prix_x10.objects.filter(
            item=OuterRef('pk')
        ).values('prix').order_by('-saved_at')[:1]
    )
)
从django.db.models导入OuterRef,子查询
Item.objects.annotate(
prix_x1=子查询(
Prix_x1.objects.filter(
item=OuterRef('pk')
).values('prix').order_by('-saved_at')[:1]
),
prix_x10=子查询(
Prix_x10.objects.filter(
item=OuterRef('pk')
).values('prix').order_by('-saved_at')[:1]
)
)

此查询集产生的
项将有两个额外属性
.prix_x1
.prix_x10
,其中包含上次
prix_x1
prix_x10
项相关的
prix_x10
记录。这正是我想要的,非常感谢!我只需要更改子查询bea的名称,因为我正在处理“ValueError:annotation'prix_x1'与模型上的字段冲突。”