按日期获取具有多对一关系的多个 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_x1
的 prix
和Prix_x10
条与该项目相关的记录。
我有 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_x1
的 prix
和Prix_x10
条与该项目相关的记录。