Alex Cuadra
Alex Cuadra

Reputation: 97

Django checkbox for filter

Im having some problem when I want to keep a checkbox checked. When I send the form all the checkbox are checked. so idk how to change the if statement for that :(

 <div class="form-group">
                <label >Marca</label>
                {% for brand in q %}
                <div class="custom-control custom-checkbox">
                    <input type="checkbox" class="custom-control-input" id="{{brand.brand}}" name="test" value="{{brand.brand}}" {% if marca %} checked="checked" {%endif%}>
                    <label class="custom-control-label" for="{{brand.brand}}" style="cursor: pointer;">{{brand.brand}}</label>
                    </div>
                {% endfor %}

            </div>

And here is the view:

marca = request.GET.get('test')
if marca :
    products = products.filter(brand__name__in=request.GET.getlist('test'))

All the other things are fine. It shows me the brands that I choose. So I just want to keep the checkbox that I checked :( and I think the problem is that If statement in the template

Upvotes: 1

Views: 1250

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477814

Just pass a set of the values in the values to the template:

marca_vals = set(request.GET.getlist('test'))
# …
context = {
    'marca_vals': marca_vals,
    # …
}
return render(request, 'some_template.html', context)

in the template you can then render it with checked in case the value is in the marca_vals:

<input type="checkbox" {% if brand.brand in marca_vals %}checked{% endif %} class="custom-control-input" id="{{brand.brand}}" name="test" value="{{brand.brand}}">

You might however want to consider using a form, or even django-filters [readthedocs] to both make filtering and rendering the form more convenient.

Upvotes: 1

Related Questions