Почему в Django client.post значения arg вложены в списки?

Я тестирую свой api с помощью Django следующим образом:

result = self.client.post( reverse(path), { "arg1":"value" })

Внутри представления, я ставлю точку останова.

@api_view(["POST"])
def post_arg(request):
    breakpoint()

Но когда я печатаю данные POST, значения были добавлены в списки.

(Pdb) request.POST
{ 'arg1': ['value'] }

В этом примере только один arg, но если я добавляю больше, то каждый из них добавляется в список. Я не думаю, что это происходит, когда мой фронтенд публикует данные, так почему же это происходит здесь? И есть ли способ не добавлять значения в список?

Я не думаю, что это происходит, когда мой фронтенд публикует данные.

Один и тот же ключ может быть несколько раз связан со значением, например, когда вы используете флажок с:

<input type="checkbox" name="foo" value="bar">
<input type="checkbox" name="foo" value="qux">

Если вы установите оба флажка, это добавит foo=bar&foo=qux в тело запроса, так что один и тот же ключ (foo) будет связан и с bar, и с qux.

Если вы используете request.POST['foo'], он вернет значение последней записи, поэтому 'qux'. Вы также можете использовать request.POST.getlist('foo'), это вернет все значения для этого ключа в списке, так что ['bar', 'qux'].

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