Добрый день! Помогите, пожалуйста, решить вопрос.
На сайте Django, на странице Продуктов (одной из категорий), пытаюсь реализовать сортировку продуктов по ценам (Например: цена низкая-высокая, цена высокая-низкая, по алфавиту).
Знаю как это сделать с помощью django-forms, но меня не привлекает кнопка Submit.
Начала делать с помощью ajax-запроса. В отладчике браузера Chrome во вкладке Network - Response загружаемого файла типа document вижу разметку новой страницы с отсортированными продуктами.
Но не знаю как перезагрузить текущую страницу и заменить на ту которую вернул сервер (с отсортированными продуктами) .
Буду рада другим решениям и предложениям.
Вот мой код:
Из category.html
$(document).ready(function() {
$('#myOptions').change(function () {
var val = $("#myOptions option:selected");
var sort_type = $(val).attr('data-sort');
var categ = document.getElementById("category_name");
var category = $(categ).attr('data-category');
console.log(sort_type);
console.log(category);
$.ajax({
type:"POST",
url: '{{ category.get_absolute_url }}',
data: {
'csrfmiddlewaretoken' : '{{ csrf_token }}',
'sort_type': sort_type,
},
dataType: 'json',
success: function () {
console.log('ok');
}
});
});
});
Из views.py
def category_view(request, category_slug):
cart_product_form = CartAddProductForm()
cart = Cart(request)
category = Category.objects.get(slug=category_slug)
categories = Category.objects.all()
products = Product.objects.filter(available=True, category=category)
# filter_form = filter_form_search(request, category_slug)
filter_form = ProductFilterForm(request.GET)
if filter_form.is_valid():
if filter_form.cleaned_data["min_price"]:
products = products.filter(price__gte=filter_form.cleaned_data["min_price"])
if filter_form.cleaned_data["max_price"]:
products = products.filter(price__lte=filter_form.cleaned_data["max_price"])
if filter_form.cleaned_data["ordering"]:
products = products.order_by(filter_form.cleaned_data["ordering"])
if filter_form.cleaned_data["the_choices"]:
items = filter_form.cleaned_data["the_choices"]
if items:
items_products = []
for i in items:
items_products += products.filter(volume=int(i))
products = items_products
if request.is_ajax(): # os request.GET()
ordering = request.POST.get("sort_type")
# category_slug = request.POST.get("category_slug")
# category = Category.objects.get(name=category_slug)
products = products.order_by(ordering)
context = {
'products': products,
'categories': categories,
'category': category,
'cart': cart,
'cart_product_form': cart_product_form,
'filter_form': filter_form
}
return render(request, 'category.html', context)
models.py
class Category(models.Model):
objects = None
name = models.CharField(max_length=100, verbose_name='Название')
slug = models.SlugField(blank=True, unique=True)
objects = CategoryManager()
class Meta:
ordering = ['name']
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('category_detail', args=[self.slug])
urls.py
from django.conf.urls import url
from .views import (
base_view,
category_view,
product_view,
contact_view,
product_search_view,
)
urlpatterns = [
url(r'^category/(?P<category_slug>[-\w]+)/$', category_view, name='category_detail'),
url(r'^product_search/$', product_search_view , name='product_search'),
url(r'^product/(?P<product_slug>[-\w]+)/$', product_view, name='product_detail'),
url(r'^contact/$', contact_view, name='contact'),
url(r'^logout/$', LogoutView.as_view(next_page=reverse_lazy('base')), name='logout'),
url(r'^$', base_view, name='base')
]
Ногами сильно не бейте, это мой первый пост) Заранее спасибо!