Django Python urlencode одного и того же ключа с несколькими значениями
Как следует из названия, я пытаюсь выполнить urlencode с помощью Ordered Dict в python
def url_replace(request, field, value, direction=""):
dict_ = request.GET.copy()
if field == "order_by" and field in dict_.keys():
if dict_[field].startswith("-") and dict_[field].lstrip("-") == value:
dict_[field] = value
elif dict_[field].lstrip("-") == value:
dict_[field] = "-" + value
else:
dict_[field] = direction + value
else:
dict_[field] = direction + str(value)
print("UNORDERED___________________")
print(dict_)
print(super(MultiValueDict, dict_).items())
print("ORDERED_____________")
print(OrderedDict(super(MultiValueDict, dict_).items()))
print(OrderedDict(dict_.items()))
return urlencode(OrderedDict(dict_.items()))
Вывод для приведенного выше кода
UNORDERED___________________
<QueryDict: {'assigned_to_id': ['1', '2'], 'client_id': ['2', '1'], 'page': ['2']}>
dict_items([('assigned_to_id', ['1', '2']), ('client_id', ['2', '1']), ('page', ['2'])])
OrderedDict([('assigned_to_id', '2'), ('client_id', '1'), ('page', '2')])
ORDERED_____________
OrderedDict([('assigned_to_id', ['1', '2']), ('client_id', ['2', '1']), ('page', ['2'])])
OrderedDict([('assigned_to_id', '2'), ('client_id', '1'), ('page', '2')])
Как вы видите, assigned_to_id имеет только 2
в конце .
Что я ожидаю, так это упорядоченный дикт с
OrderedDict([('assigned_to_id', '2'),('assigned_to_id', '1'), ('client_id', '1'), ('client_id', '2'),('page', '2')])
Возможно, есть лучший подход для этого, я немного новичок в python
Моя конечная цель - вернуть dict с несколькими ключами или что-нибудь, что можно использовать в urlencode
Когда в качестве аргумента запроса используется последовательность двухэлементных кортежей, первый элемент каждого кортежа является ключом, а второй - значением. Элемент значения сам по себе может быть последовательностью, и в этом случае, если необязательный параметр
doseq
имеет значение True, для каждого элемента последовательности значений для ключа генерируются отдельные пары ключ=значение, разделенные символом '&'. Порядок параметров в кодированной строке будет соответствовать порядку кортежей параметров в последовательности.
Вот простой пример:
from urllib import parse
print(parse.urlencode({"a": [1, 2], "b": 1}, doseq=True))
# "a=1&a=2&b=1"