Пытаюсь найти способ передать список элементу в request.POST. Как мне это сделать?

Вот мой html код в проекте django:

<!DOCTYPE html> <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        {% load static %}
        <script src="{% static 'jquery-3.6.2.min.js' %}" ></script>
    </head>
    
    <body>
        <form action="{% url 'index' %}" method="post">
            {% csrf_token %}
            <button id="button1" name="action" value="">button2</button>
            <script>
                $("#button1").click(
                    function(){
                        arr = ["one", "two"]
                        $("#button1").attr('value',arr)
                    }
                )
            </script>
        </form>
    </body>

</html>

При нажатии на кнопку я запускаю JQuery, который присваивает массив: arr значению кнопки1. Это request.POST после этого:

<QueryDict: {'csrfmiddlewaretoken': ['Rws3PVVBVOGsoXm720M5YbuZNTYMin6CxklI78in2PWdrxAYKxw3XqV7cba2xt7P'], 'action': ['one,two']}>

Вместо 'action': ['one,two'] я хочу получить 'action': ['one', 'two'], или 'action': [['one', 'two']]

Как это сделать?

Используйте JSON.stringify() для преобразования массива в строку JSON, а затем используйте json.loads(...) для загрузки JSON строки, чтобы преобразовать ее в Python объект.

Ваш код будет выглядеть следующим образом

JavaScript


<script>
  $("#button1").click(
    function(){
      arr = JSON.stringify(["one", "two"])
      $("#button1").attr('value',arr)
    })
</script>

Python


import json


def foo(request):
    action = request.POST.get('action')
    if action:
       print(json.loads(action)) # result -> {'action': ['one', 'two']}

Примечание:

Убедитесь, что вы санируете ваши request.POST.get('action') данные, они могут содержать вредоносный код, если они отправлены клиентом, поэтому всегда проверяйте ваши данные запроса.

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