Django查询集相关字段查找并过滤最后一个对象

yyhrrdl8  于 2023-01-14  发布在  Go
关注(0)|答案(1)|浏览(135)

我正在建立一个价格比较django的应用程序,我遇到了这个场景,我需要过滤每个卖家在相关字段查找的最后价格。
卖家模型:

class Seller(models.Model):
name = models.CharField(max_length=250, null=True)

部件型号:

class Part(models.Model):
name = models.CharField(null=True, blank=True, max_length=250, unique=True)

卖家模型:

class Price(models.Model):

seller = models.ForeignKey(Seller, on_delete=models.CASCADE, null=True, blank=True, related_name='sellerprice')
part = models.ForeignKey(Part, on_delete=models.CASCADE, null=True, blank=True, related_name='partprice')
price = models.FloatField(null=True, blank=True)
added = models.DateTimeField(auto_now_add=True, null=True, blank=True)

每件销售商品都有4个价格历史记录,按“添加”顺序排列,每个价格旁边都有卖家名称。
视图查询集:

parts = Part.objects.all()

模板:

{% for part in parts %}
    {% for y in part.partprice.all|slice:":4" %}
       <a href="{{y.part.amazonURL}}"><p>${{y.price}} {{y.seller}}</p></a>
...
...
...
  {% endfor %}
{% endfor %}

价格表:

问题是:

我试图询问:
最新添加日期之前订购的各卖方每件产品的最新价格
到目前为止我尝试过:

>>> for part in parts:
...  for price in part.partprice.all().order_by('price')[:4]:
...   print(price)

结果:

(NGK 3951) $4.0 Amazon @2023-01-09 20:36:37.083544+00:00
(NGK 3951) $5.0 Amazon @2023-01-09 20:26:12.961078+00:00
(NGK 3951) $5.5 Rockauto @2023-01-09 20:26:31.890411+00:00
(NGK 3951) $7.0 Ebay @2023-01-09 20:26:20.358864+00:00
(Bosch Automotive 9603) $1.0 Carid @2023-01-10 22:21:53.431852+00:00
(Bosch Automotive 9603) $1.0 Amazon @2023-01-10 22:22:00.237141+00:00
(Bosch Automotive 9603) $21.0 Ebay @2023-01-09 20:26:44.716020+00:00
(Bosch Automotive 9603) $22.0 Amazon @2023-01-09 20:26:39.625562+00:00

预期的查询是只显示卖方一次只为每个迭代,如果产品没有价格从任何4个卖方离开它的空白或只是显示最新的价格可用。
任何帮助都非常感谢,我希望所有的细节都包括在内。

juzqafwq

juzqafwq1#

根据评论...试试这样的东西:

from django.db.models.aggregates import Max
latest_prices = Price.objects \
  .values('seller', 'price') \
  .annotate(latest_report=Max('added'))

相关问题