Alouani Younes
Alouani Younes

Reputation: 1036

show selected option when render posted form in django

I have tried to render a form with a ChoiceField like bellow :

<div class="col-25">
  <label for="category">Subcategory</label>
 </div>
 <div class="col-75">
  <select name="category" id="id_category">
    {% for x in FilterbyCategory.fields.category.choices %}
	    <option value="{{ x.0 }}"{% if FilterbyCategory.fields.category.value == x.0 %}selected{% endif %}> 
      {{ x.1 }}
    </option>
    {% endfor %}
  </select>
  </div>

When I submit the form, I don't get the initial option selected. DO I have a problem here ?

in the view function, I use the request.POST to create an instance :

filterbycategory = FilterbyCategory(request.POST)

I then print the form instance, I get this :

     <tr><th><label for="id_category">Category:</label></th><td>
<select name="category" id="id_category">
      <option value="">---------</option>
      <option value="1" selected>BMW</option>
</select></td></tr>

but the option is not selected in the template rendered manually.

Upvotes: 2

Views: 1083

Answers (1)

Alouani Younes
Alouani Younes

Reputation: 1036

I found the solution. I had to get field value directly and to use safe like bellow :

<option value="{{ x.0 }}"{% if FilterbyCategory.category.value|safe == x.0|safe %} selected{% endif %}> {{ x.1 }} </option>

It works like a charm now.

Upvotes: 3

Related Questions