как добавить элемент в список django

#django #list #session

#django #Список #сессия

Вопрос:

Я смущен тем, как django добавляет элементы в список. рассмотрим следующее:

 def add(request):   
    if request.method == "POST":
        form = NewTaskForm(request.POST)        
        if form.is_valid():
            task = form.cleaned_data["task"]          
        
            request.session['tasks'].append(task)
            # request.session['tasks']  = [task]
      
            return HttpResponseRedirect(reverse("tasks:index"))            
        else:
            return render(request, "tasks/add.html",{
                "form": form
            })
    return render(request, "tasks/add.html",{
    "form": NewTaskForm()
})
  

если мы добавим оператор печати после request.session[‘tasks’].append(задача), мы получим список:

 ['check email']
  

мы также получим тот же список, если прокомментируем строку добавления и используем правильный способ с =

Однако при перенаправлении на task / index первый способ показывает пустой список, а второй — ожидаемый список. Почему? Что происходит?

Комментарии:

1. Где / как определяются сеансы [‘задачи’]?

2. хороший улов, не хватает строки.

Ответ №1:

Django сохраняет данные сеанса и отправляет клиенту только в том случае, если они были назначены или удалены. Как в вашем втором примере:

 request.session['tasks']  = [task]
  

Если вы обновляете информацию внутри данных вашего сеанса, она не распознает изменение и не обновит его, например, когда вы добавляете некоторые данные в список, назначенный ключу «задачи». В этом случае вам нужно явно сообщить Django, что вы изменили данные сеанса с помощью:

 request.session.modified = True