Использую Select для упорядочивания моих товаров по цене,
Как сделать запрос к базе данных, когда вы выбираете highest, он упорядочивает товар от самой дорогой цены к списку и наоборот. Вот мои шаблоны. Я думаю, вы можете увидеть сортировку select.
<section class="body-section">
<!--Cleaning services-->
{%for category in categories%}
<section class="main-products cooler">
<div class="upper-bar">
<div>
<h2>{{category.name}}</h2>
</div>
<div class="sortby">
<span>Sort By: <select class="sort">
<option value="highest">Highest Price</option>
<option value="lowest">Lowest Price</option>
</select></span>
</div>
</div>
<hr />
<!--Single Products-wrap-->
<div class="specific-product-wrap specific-product-wrap-cooler">
{% for product in category.product_set.all %}
<a href="{%url 'product' product.pk%}">
<div class="specific-single-product">
<div class="product-image center">
<img class="product-image-shape" src="{{product.image.url}}" alt="adamol Distilled" />
</div>
<div class="produc-descriptions">
<h4 class="specific-product-title">{{product.title}}</h4>
<p class="one-line-description"></p>
<p class="price">Ksh.{{product.price}}</p></a>
<button data-product="{{product.id}}" data-action="add" class="AddToCart update-cart" id="addToCart update-cart">Add To
Cart</button>
</div>
</div>`
{% empty %}
<p>No Product Lol</p>
{%endfor%}
</div>
</section>
Вот мой model.py
class Product(models.Model):
image = models.ImageField(null=False, blank=False)
title = models.CharField(max_length=2000, null=False, blank=False)
category = models.ForeignKey(
Category, on_delete=models.CASCADE, default=True, null=False)
price = models.DecimalField(max_digits=5, decimal_places=2)
description = models.TextField()
delivery_time = models.DateTimeField(default=datetime.now, blank=True)
is_published = models.BooleanField(default=True)
created_at = models.DateTimeField(default=datetime.now, blank=True)
digital = models.BooleanField(default=False, null=True, blank=False)
def __str__(self):
return self.title
Я хочу, чтобы пользователь мог просматривать товары, когда он выбирает самый высокий, он сортирует, когда он выбирает самый низкий, он сортирует по ценам. Пробовал разные методы, все они не работают в моей программе. Вот мой views.py
def waterProducts(request):
categories = categories = Category.objects.filter(
name__startswith="Products").order_by('name')
page_num = request.GET.get("page")
paginator = Paginator(categories, 3)
try:
categories = paginator.page(page_num)
except PageNotAnInteger:
categories = paginator.page(1)
except EmptyPage:
categories = paginator.page(paginator.num_pages)
if request.user.is_authenticated:
customer = request.user
order, created = Order.objects.get_or_create(
customer=customer, complete=False)
items = order.orderitem_set.all()
cartitems = order.get_cart_items
else:
items = []
order = {' get_cart_total': 0, 'get_cart_items': 0}
cartitems = order['get_cart_items']
waters = Product.objects.all()
context = {
'categories': categories, 'waters': waters, 'cartitems': cartitems
}
return render(request, "products/WaterProductPage.html", context)
Вот как вы можете заказать продукты по наивысшей цене :
ordered_product = Product.objects.order_by('-price')
Обратите внимание на - перед ценой
Если вы хотите показать результат в соответствии с шаблоном, выберите значение :
views.py
def waterProducts(request):
# retrieve the order_by variable from url
order_by = request.GET.get('order_by', None)
if order_by == 'highest':
# the variable is set in the url
products = Product.objects.order_by('-price')
else:
# The variable is not set
products = Product.objects.order_by('price')
template.html
<div class="sortby">
<span>Sort By:
<select class="sort">
<option value="highest"><a href="{% url 'product_page_url' %}?order_by=highest">Highest Price</a></option>
<option value="lowest"><a href="{% url 'product_page_url' %}?order_by=lowest">Lowest Price</a></option>
</select>
</span>
</div>