Пустой список внутри QueryDict на самом деле не пуст - PullRequest
0 голосов
/ 30 апреля 2020

В моем методе есть объект QueryDyct (request.data), и я хочу внести в него некоторые изменения, поэтому я скопировал его: data_dict = data.copy(). При создании в нем пустого списка он создает дополнительный внутренний список:

data_dict['emails'] = []
data_dict['emails'].append('foo@mail.com')
data_dict['emails'].append('bar@mail.com')

Вместо создания пустого списка и добавления в него данных, он создает список списка и добавляет данные во внутренний список:

На часах PyCharm это выглядит как:

enter image description here

Почему они ведут себя так? И для дальнейшей обработки он обрабатывается (django валидатором) как электронное письмо с адресом ['foo@mail.com', 'bar@mail.com'], но я хочу иметь два разных электронных письма с добавленными адресами.

Как создать обычный пустой список в QueryDict?

1 Ответ

2 голосов
/ 30 апреля 2020

A QueryDict - это MultiValueDict для начала, так как вы можете повторить GET-параметры. Т.е. по умолчанию он обрабатывает свои значения в списках. Хорошей новостью является то, что вы можете использовать его функции непосредственно для обработки списков:

from django.http.request import QueryDict

d = QueryDict(mutable=True)
d.setlist('emails', ['abc@abc.com', 'def@abc.com'])
d['emails']
# 'def@abc.com'
d.getlist('emails')
# ['abc@abc.com', 'def@abc.com']
d.appendlist('emails', 'foo@bar.baz')
d
# <QueryDict: {'emails': ['abc@abc.com', 'def@abc.com', 'foo@bar.baz']}>
d.urlencode()
# 'emails=abc%40abc.com&emails=def%40abc.com&emails=foo%40bar.baz'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...