如何使用 django 和 htmx 对查询集进行排序?
how to sort a queryset using django and htmx?
我正在使用 django-filter 来应用过滤器,并且在新的查询集上我想做一个依赖于 select 标签的 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)
这是我发出 htmx 请求的 html 片段
<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>
为什么这根本不起作用?
如何在 select 选项更改时调用简单的 htmx 表单?
您使用 hx-trigger="change">
.
据我所知,它需要 更改 并在末尾添加“d”。
顺便说一句:下次请尽量提供一个最小的例子。
我正在使用 django-filter 来应用过滤器,并且在新的查询集上我想做一个依赖于 select 标签的 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)
这是我发出 htmx 请求的 html 片段
<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>
为什么这根本不起作用? 如何在 select 选项更改时调用简单的 htmx 表单?
您使用 hx-trigger="change">
.
据我所知,它需要 更改 并在末尾添加“d”。
顺便说一句:下次请尽量提供一个最小的例子。