【问题标题】:How to display Maximum Discount Product in Django?如何在 Django 中显示最大折扣产品?
【发布时间】:2020-11-05 16:57:28
【问题描述】:

我的数据库中有products 表,有两列totalpricesaleprice,当我从后端添加产品时,我提交了两个价格。我想计算产品的最高报价(计算报价逻辑将是这样的,offer=totalprice/saleprice),我想在我的网站 homegae 上显示这些产品,但我不知道该怎么做在姜戈中。请让我指导如何在views.py 文件中添加逻辑。

这是我的 views.py 文件...

def home(request):
   product= Product.objects.filter(featured=True).order_by('-created_at')[0:8]
   subc=Product.objects.filter(discount=30).order_by('-created_at')
   return render(request, 'mainpage/index.html',
              {'product':product,'subc':subc})

这是我的 models.py 文件

class Product(models.Model):
   name=models.CharField(max_length=225)
   slug=models.SlugField(max_length=225, unique=True)
   subcategory=models.ForeignKey('SubCategory', related_name='prosubcat', on_delete=models.CASCADE, blank=True, null=True)
   totalprice=models.IntegerField()
   saleprice = models.IntegerField()
   title=models.CharField(max_length=225)
   description = models.TextField()
   overview = models.TextField(null=True)
   featured = models.BooleanField(null=True)
   trending=models.BooleanField(null=True)
   image= models.ImageField(blank=True)
   tags = TaggableManager()
   created_at = models.DateTimeField(auto_now_add=True)
   updated_at = models.DateTimeField(auto_now=True)

【问题讨论】:

    标签: django django-models django-forms django-views django-templates


    【解决方案1】:

    您可以像这样在查询集中使用annotate

    from django.db.models import F
    def home(request):
           products= Product.objects.filter(featured=True).annotate(offer=F('totalprice')-F('saleprice'))
    

    现在在模板中你可以这样做:

    {% for product in products %}
          Product Offer:{{ product.offer }}
    {% endfor %}
    

    编辑:要计算百分比,试试这个。

    Product.objects.filter(featured=True).annotate(offer=((F('totalprice')-F('saleprice'))/F('totalprice'))*100)
    

    【讨论】:

    • 它的计算是这样的(假设totalprice是500,saleprice是250,那么它显示输出500-250=250,但我想在计算后以百分比显示输出,以及它的输出将是50% 折扣。我将在产品上显示此折扣。
    • 它工作得很好,但我的最后一个问题是,我如何才能优先显示最高报价产品(假设如果产品有 90% 的折扣,那么它应该首先显示,其他 80%、70 % 折扣产品应在此之后显示)
    • @sainitor .order_by('-offer')
    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 2020-01-15
    • 2022-11-21
    • 1970-01-01
    • 2022-11-11
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多