Передача списка строк (uuids) туда и обратно между представлениями django и шаблоном

На одной из страниц моего проекта django у меня есть флажок для выбора uuids, соответствующих модели. Вот что у меня есть на странице views.py, и это хорошо работает для создания флажка.

def template_page(request, uuid_selects=None, option_1=False):
    ...
    class uuidCheckBox(forms.Form):
            uuid_selects =
            forms.ModelMultipleChoiceField(queryset=uuid_model, 
                                           widget=forms.CheckboxSelectMultiple)

    uuid_select_field = uuidCheckBox()
    args.update({'uuid_select_field': uuid_select_field})
    ...
    render(request, landing.html, args)

На моей странице шаблона есть следующее:

<form action='get_uuid_selects' method='GET'>
   {{ uuid_select_field }}
   <input type='submit' value='Submit' />
 </form>

Который перенаправляет обратно к этому представлению:

def get_uuid_selects(request):
    uuid_selects = request.GET.getlist('uuid_selects')
    return landing_page(request, uuid_selects)

Все это прекрасно работает, однако когда я пытаюсь передать этот список uuids обратно в шаблон как скрытое значение и вернуть его, когда пользователь обращается к другой форме, список не работает. Например, я передаю список в качестве аргумента, следуя подходу здесь Это views.py для шаблона:

def template_page(request, uuid_selects=None, option_1=False):
    ...
    if uuid_selects:
         args.update({'uuid_selects': json.dumps(uuid_selects)})
   ...
   render(request, landing.html, args)

Затем я передаю этот список uuids обратно на страницу шаблона, чтобы он был скрытым значением в другой форме на template.html странице.

      <form action='to_option_1' method='GET'>
        <button type='submit'>Option 1</button>
        {% if uuid_selects %}
          <input type="hidden" value= {{ uuid_selects }} name="uuid_selects">
        {% endif %}
      </form>

После того, как я передал список uuids обратно в views.py

, возникает ошибка.
def to_option_1(request):
    option_1 = True
    try:
        uuid_selects = request.GET.getlist('uuid_selects')
    except KeyError:
        uuid_selects = None
    return team_landing_page(request,
                             uuid_selects = uuid_selects,
                             option_1 = True)

Запрос GET возвращает только первый uuid (список, который я пробовал, был длиннее 1) и в неправильной форме для чтения как uuid (это вызывает ошибку позже в views.py, но это не имеет значения, из ответа GET ясно, что ошибка возникает именно здесь.:

).

['“["4322ac69-4c96-4fc1-b901-d68b5nnb0329",”

Ясно, что это как-то связано с форматированием строк, но я не могу понять, как заставить это работать, тем более что передача списка uuids работает в первый раз, когда он просто должен перейти от HTML-шаблона обратно к views.py - только когда я повторяю процесс, все перестает работать

Извините, если это слишком много кода, просто хотел уточнить, в чем проблема.

Возможно, вам потребуется изменить аргумент вашей функции uuid_selects на:

def template_page(request, uuid_selects, option_1=False):

Возможно, ошибка заключается в использовании getlist вместо просто get?

uuid_selects = request.GET.get('uuid_selects')

Решение (спасибо Benbb96 за предоставление нескольких ключевых советов) заключается в хранении списка uuids в виде строки JSON туда и обратно. На странице template.html входные данные нужно заключить в одинарные кавычки, чтобы они считывались как строка.

<input type="hidden" value= '{{ uuid_selects }}' name="uuid_selects">

Затем в функции views.py go_to_option_1 она должна быть считана обратно как строка, не используя функцию getlist

uuid_selects = request.GET('uuid_selects')

Наконец, чтобы прочитать строку обратно как список в python, необходимо разобрать строку JSON.

uuid_selects = json.loads(uuid_selects)

Вернуться на верх