gpt4 book ai didi

python - Django查询集按相关字段中的最新值排序

转载 作者:行者123 更新时间:2023-12-03 17:10:32 24 4
gpt4 key购买 nike

考虑 Django 中的以下模型:

class Item(models.Model):
name = models.CharField(max_length = 100)

class Item_Price(models.Model):
created_on = models.DateTimeField(default = timezone.now)
item = models.ForeignKey('Item', related_name = 'prices')
price = models.DecimalField(decimal_places = 2, max_digits = 15)
商品的价格会随时间变化,因此我想保留价格历史记录。
我的目标是使用 Django ORM 进行单个查询以获取具有最新价格的项目列表,并按此价格按升序对结果进行排序。
实现这一目标的最佳方法是什么?

最佳答案

您可以使用 Subquery获取最新Item_Price对象和排序这些:

from django.db.models import OuterRef, Subquery

last_price = Item_Price.objects.filter(
item_id=OuterRef('pk')
).order_by('-created_on').values('price')[:1]

Item.objects.annotate(
last_price=Subquery(last_price)
).order_by('last_price')
每个 Item ,我们由此得到最新的 Item_Price并在注释中使用它。
话虽如此,上述建模可能并不理想,因为它需要大量复杂的查询。 django-simple-history [readthedocs.io]通过创建额外的模型并保存历史记录来实现这一点。它还有一个管理器,允许查询历史状态。这可能使使用历史数据更简单。

关于python - Django查询集按相关字段中的最新值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64069983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com