Товары не фильтруются правильно с помощью AJAX в DjangoPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Товары не фильтруются правильно с помощью AJAX в Django

Сообщение Anonymous »

Я работаю над веб-сайтом электронной коммерции, используя Django и jQuery для фильтрации товаров по выбранным критериям (диапазон цен, категории и поставщики). Хотя запрос AJAX кажется отправленным правильно и я получаю ответ, все продукты по-прежнему отображаются на странице, независимо от выбранных фильтров.
Что я реализовал:
Код JavaScript (AJAX):

Код: Выделить всё

$(document).ready(function() {
function filterProducts() {
let filter_object = {};

// Get price range values
let min_price = $("#price-min").val() || 0;
let max_price = $("#price-max").val() || 9999999;

filter_object.min_price = min_price;
filter_object.max_price = max_price;

// Get selected categories and vendors
$(".filter-checkbox").each(function() {
let filter_key = $(this).data("filter");
filter_object[filter_key] = Array.from(
document.querySelectorAll('input[data-filter=' + filter_key + ']:checked')
).map(function(element) {
return element.value;
});
});

// Send AJAX request to filter products
$.ajax({
url: '/filter-product',
data: filter_object,
dataType: 'json',
beforeSend: function() {
console.log("Filtering products...");
},
success: function(response) {
console.log("Products filtered successfully.");
$(".showcase").html(response.data);
},
error: function(xhr, status, error) {
console.error("Error filtering products:", error);
}
});
}

// Event listener for checkbox and filter button
$(".filter-checkbox, #filter-btn").on("click", filterProducts);
});
Структура HTML:

Код: Выделить всё



PRICE





















MANUFACTURER


[list]
{% for v in vendors %}
[*]


{{v.title}}

{% endfor %}
[/list]



Модель продукта Django:

Код: Выделить всё

class Product(models.Model):
# Product fields...
price = models.DecimalField(max_digits=10, decimal_places=2, default=1.99)
# Other fields...
Представление Django для обработки фильтрации:

Код: Выделить всё

def filter_product(request):
categories = request.GET.getlist("category[]")
vendors = request.GET.getlist("vendor[]")

min_price = request.GET.get('min_price', 0)
max_price = request.GET.get('max_price', 9999999)

products = Product.objects.filter(product_status="published").order_by("-id").distinct()

products = products.filter(price__gte=min_price)
products = products.filter(price__lte=max_price)

if categories:
products = products.filter(category__id__in=categories).distinct()

if vendors:
products = products.filter(vendor__id__in=vendors).distinct()

context = {
"products": products
}
data = render_to_string("core/async/product-list.html", context)

return JsonResponse({"data": data})

Текущая проблема:
  • Несмотря на получение ответа AJAX с успешно отфильтрованными продуктами
    code>., все товары по-прежнему отображаются на странице независимо от примененных фильтров.

Что я пробовал:
  • Проверено, что запрос AJAX отправляет правильные параметры фильтра.
  • Убедилось, что логика представления Django правильно применяет фильтры.
  • Подтверждено, что HTML-код отфильтрованного продукта отображается в ответе правильно.
Вопросы:
  • В чем может быть причина того, что все товары отображаются, несмотря на фильтры?
  • Есть ли такие советы по отладке или распространенные ошибки, на которые следует обратить внимание при реализации?
Спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-django
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»