#python #django #django-3.2 #htmx
Вопрос:
я использую django-фильтр для применения фильтров, и в новом наборе запросов я хочу выполнить сортировку запросов htmx, которая зависит от выбора тега, измените новую сортировку набора запросов, вот мое мнение:
views.py
def sorted_htmx_products(request):
context = {}
qs= request.GET['order_by']
print('request', qs['order_by'])
if qs == "name_a":
querySet = Product.objects.all().order_by('name')
elif qs == "name_z":
querySet = Product.objects.all().order_by('-name')
elif qs == "price":
querySet = Product.objects.all().order_by('price')
elif qs == "brand":
querySet = Product.objects.all().order_by('brand')
else:
querySet = Product.objects.all()
products = ProductFilter(request.GET, queryset=querySet )
print('sorted products', products.qs)
context['products'] = products.qs
return render(request, 'snippets/htmx_products.html', context)
а вот мой фрагмент html, в котором я сделал запрос htmx
<div class="product-select-box">
<div class="product-short" >
<form hx-get="{% url 'core:sorted-products' %}" hx-target="#removed-products" hx-swap="outerHTML" hx-trigger="change">
<p>Trier par:</p>
<select name="order_by" class="nice-select" >
<option value="default">Default</option>
<option value="name_a">Nom (A - Z)</option>
<option value="name_z">Nom (Z - A)</option>
<option value="price">Prix</option>
<option value="brand">Marque</option>
</select>
</form>
</div>
</div>
почему это вообще не работает ?
как сделать простой вызов формы htmx при изменении опции выбора ?
Комментарии:
1. Можете ли вы показать, как yiu отображает элементы в шаблоне?
2. Ваш
price
вариант также начинается с двух<<
s.3. Вы хотите, чтобы запрос был сделан автоматически при изменении тега select? Напишите немного JavaScript, чтобы сделать это за вас (хотя зачем это делать? Просто позвольте пользователю выбрать свой выбор, принять решение и нажать кнопку, чтобы фактически отфильтровать). Вот совет: поскольку вы уже используете его, в django-фильтре есть фильтр упорядочения .
4. @WillemVanOnsem уверен , что я отредактировал вопрос и поместил весь шаблон продуктов, спасибо за помощь
5. @AbdulAzizBarkat я отправил форму с некоторыми js с onchange=»this.form.submit ()», но он перезагружает страницу, которая не вызывает функцию sorted_htmx_products, спасибо за заказфильтра, я собираюсь попробовать
Ответ №1:
Ты пользуешься hx-trigger="change">
.
AFAIK его нужно изменить на «d» в конце.
Кстати: Пожалуйста, в следующий раз постарайтесь привести минимальный пример.
Комментарии:
1. конечно, следуйте правке после добавления буквы d, она запускает запрос, но получает пустую страницу.
2. @miyou995 вы отладили это с помощью chromium devtools?