Как сохранить значение флажка в 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>    

Два шага:

  1. В вашем представлении, если форма отправлена, т.е. когда 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
  1. В вашем шаблоне поместите эту переменную в качестве атрибута в HTML-элемент input:
 <input type="checkbox" class="hidden-box" id="{{ toto.id }}" autocomplete="off" {{ checked }}/>

Таким образом, атрибут checked input будет размещен динамически. Если он был передан через метод POST, то он у вас есть. В противном случае, он просто пуст.

добавьте checked в поле ввода, если вы хотите, чтобы оно оставалось предварительно отмеченным или зависело от значений View.

<input {% if checked %} checked{% endif %}"/>
Вернуться на верх