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'与模型上的字段冲突。”