django产品价格跟踪器:获取所有时间的最大和最小pri的金额和日期

2021-04-11 15:39:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试建立一个django应用程序,在那里我可以跟踪产品价格。该应用程序会定期获取新的价格,并将其图形化,并显示最近的价格变化历史。在

我每天检查一次价格,然后把价格加上日期时间戳保存到我的模型上。在

在模型.py在

Class Product(models.Model):  
    title = models.CharField(max_length=255)

Class Price(models.Model):  
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    date_seen = models.DateTimeField(auto_now_add=True)
    price = models.IntegerField(blank=True, null=True)

除了产品的当前价格,我还想展示我收集的所有价格数据的maxmin。我想得到这个值,以及它在这个值上的日期。到目前为止,我可以得到值,但我不能得到相应的日期。我用的是:

^{pr2}$

有什么建议吗?提前谢谢!在

编辑:根据回复,我有以下内容。我的问题是我得到的最高价格和最高日期相互独立。我想要最高价格和最高价格的日期在同一响应。在

def price_hla(self):
    return 
    Product.objects.filter(price__product=self)[:1].annotate(Max('price__price'), Max('price__date_seen'))`
2条回答
网友
1楼 ·

试试这个:

Product.objects.filter(price__product=self).annotate(
        high_price=Max('price__price'), 
    ).filter(price=F('max_price'))

这将给你在结果对象中的最高价格和日期。在

但是我想不出一种方法可以同时在同一个查询中找到最低价格/日期。我也有一种感觉,如果你有大量的项目,这将是非常缓慢的。在

网友
2楼 ·

弄清楚了,我就得到了我想要的。如果有人读到这篇文章,我很乐意得到反馈,如果这是最好的做法,或者我将超载我的数据库。在

因为我需要实际价格和最高价格的日期,所以我需要返回整个价格对象。所以我通过重写默认的get_context_data方法在DetailView上编写了一些查询集。在

在视图.py在

class ProductDetailView(DetailView):
    model = Product

    def get_context_data(self, **kwargs):
        context = super(ProductDetailView, self).get_context_data(**kwargs)      
        context['high'] = Price.objects.filter(product_id=self.get_object()).order_by('price').last()
        context['low'] = Price.objects.filter(product_id=self.get_object()).order_by('-price').last()
        context['avg'] = Price.objects.filter(product_id=self.get_object()).aggregate(avg_price=Avg('price'))

然后我使用high.pricehigh.date_seen等将其拉入我的模板中

相关问题