Как сохранить значение флажка в django?
Я использую флажки в Html, и каждый раз, когда я обновляю страницу, флажки снова снимаются. Как мне предотвратить это? Нужно ли использовать JS? Я думал о булевых полях, но не знаю, как их реализовать... Я просмотрел другие темы и там говорилось о javascript, но я вообще ничего не понимаю ни в нем, ни в том, как его реализовать. Вот мой код :
views.py :
'
@login_required(login_url='/login')
def home(request):
check=False
MyToDo = Todo.objects.filter(user=request.user)
formtoDo = forms.TodoForm()
if request.method == 'POST' and 'todosub' in request.POST:
formtoDo = forms.TodoForm(request.POST)
if formtoDo.is_valid():
todoit = formtoDo.save(commit=False)
todoit.user = request.user
todoit.save()
return HttpResponseRedirect('/home?')
[...]
data ={'form': form, 'formtoDo': formtoDo, 'MyToDo': MyToDo, 'check':check}
return render(request, "capygenda/entries.html", data)
'
html :
<form method="POST", class="Entry">
{% csrf_token %}
<p>{{ formtoDo|crispy}} <button type="submit" name="todosub" >Add</button></p>
</form>
{% csrf_token %}
{% for toto in MyToDo %}
<form method="POST">
{% csrf_token %}
<ul class="list">
<li class="list-item">
<input type="checkbox" class="hidden-box" id="{{ toto.id }}" autocomplete="off"/>
<label for="{{ toto.id }}" class="check--label">
<span class="check--label-box"></span>
<span class="check--label-text">{{ toto }}</span>
</label>
<button class="button-24" role="button"><a href="{% url 'delete_todo' toto.pk %}" class="delete">Delete</a></button>
</ul>
</form>
Два шага:
- В вашем представлении, если форма отправлена, т.е. когда
request.method == 'POST'
становитсяTrue
, передайте другой параметр{'checked: 'checked'}
:
if request.method == 'POST' and 'todosub' in request.POST:
formtoDo = forms.TodoForm(request.POST)
if formtoDo.is_valid():
todoit = formtoDo.save(commit=False)
todoit.user = request.user
todoit.save()
return HttpResponseRedirect('/home?')
[...]
# ---- here look at the last item ----
data ={'form': form, 'formtoDo': formtoDo, 'MyToDo': MyToDo, 'check':check, 'checked':'checked'}
return render(request, "capygenda/entries.html", data
- В вашем шаблоне поместите эту переменную в качестве атрибута в HTML-элемент
input
:
<input type="checkbox" class="hidden-box" id="{{ toto.id }}" autocomplete="off" {{ checked }}/>
Таким образом, атрибут checked
input будет размещен динамически. Если он был передан через метод POST
, то он у вас есть. В противном случае, он просто пуст.
добавьте checked
в поле ввода, если вы хотите, чтобы оно оставалось предварительно отмеченным или зависело от значений View.
<input {% if checked %} checked{% endif %}"/>