Храните несколько значений в одной переменной сеанса в django - PullRequest
0 голосов
/ 30 марта 2020

Я хочу сохранить идентификаторы колледжа в переменной сеанса, чтобы каждый идентификатор сохранялся в одном сеансе. Я хочу, когда пользователь нажимает кнопку «Добавить». поэтому всякий раз, когда нажимается кнопка «ДОБАВИТЬ», этот идентификатор должен храниться в choice переменной сеанса.

вот что я пробовал.

views.py

def my_choices(request, cid):  # when user is making the choices
    clg = college.objects.all()
    title = "Choice Filling"
    page = "Choice Filling"
    stud = student.objects.get(id=request.session['id'])
    clgid = college.objects.get(id=cid)
    choice_list = []
    if stud.isactive != 1:
        messages.error(request, "Your registration process is incomplete.")
    else:
        choice_list.insert(len(choice_list), clgid.name)
        print(choice_list)
        request.session['choices'] = choice_list

    return render(request, 'college_list.html', {'cid': cid, 'clg': clg, 'title': title,
                                                 'choice':choice_list})

models.py

class college(models.Model):
    name = models.CharField(max_length=50)
    password = models.CharField(max_length=10)
    institute_code = models.IntegerField(unique=True)

class student(models.Model):
    fullname = models.CharField(max_length=50)
    password = models.CharField(max_length=10)
    email = models.EmailField(unique=True)

Я хочу сохранить cid для каждого клика в choice_list, но он не хранит несколько значений, вместо этого он переопределяет предыдущее значение и хранить новый каждый раз. я тоже попробовал choice_list.insert(..) но ничего не происходит.

1 Ответ

0 голосов
/ 30 марта 2020

Вы инициализируете choice_list как пустой список вместо загрузки его из сеанса

choice_list = []

Замените его на:

choice_list = request.session.get('choices', [])

Теперь ваша новая функция должна быть

def my_choices(request, cid):  # when user is making the choices
   clg = college.objects.all()
   title = "Choice Filling"
   page = "Choice Filling"
   stud = student.objects.get(id=request.session['id'])
   clgid = college.objects.get(id=cid)

   # get choice list from your session
   choice_list = request.session.get('choices', [])

   if stud.isactive != 1:
       messages.error(request, "Your registration process is incomplete.")
   else:
       choice_list.insert(len(choice_list), clgid.name)
       print(choice_list)
       request.session['choices'] = choice_list

       # the next line shouldn't be required, but if the code still doesnt work, uncomment it
       # request.session.modified = True
   return render(request, 'college_list.html', {'cid': cid, 'clg': clg, 'title': title,
                                             'choice':choice_list})

Кроме того, если вам, возможно, придется сообщить django, что сеанс был изменен. Поместите этот код перед возвратом вашего представления (или после редактирования сеанса)

request.session.modified = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...