Django Python urlencode mismo clave con múltiples valores.
Como sugiere el título, estoy tratando de codificar en URL utilizando OrderedDict en python.
def url_replace(request, field, value, direction=""):
dict_ = request.GET.copy()
if field == "orderby" 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("INORDEN___________________")
print(dict_)
print(super(MultiValueDict, dict_).items())
print("ORDENADO_____________")
print(OrderedDict(super(MultiValueDict, dict_).items()))
print(OrderedDict(dict_.items()))
return urlencode(OrderedDict(dict_.items()))
La salida para el código anterior es:
INORDEN___________________
<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')])
ORDENADO_____________
OrderedDict([('assigned_to_id', ['1', '2']), ('client_id', ['2', '1']), ('page', ['2'])])
OrderedDict([('assigned_to_id', '2'), ('client_id', '1'), ('page', '2')])
Como puedes ver, el campo assigned_to_id tiene solo el número 2 al final.
Lo que espero es un OrderedDict con:
OrderedDict([('assigned_to_id', '2'), ('assigned_to_id', '1'), ('client_id', '1'), ('client_id', '2'), ('page', '2')])
Tal vez haya un enfoque mejor para esto, soy un poco nuevo en python.
Mi objetivo final es devolver un dict con múltiples claves o cualquier cosa que se pueda utilizar en urlencode.
davy.ai
El código anterior actualmente genera un diccionario ordenado con solo el último valor para cada clave del diccionario desordenado original. Para lograr un diccionario ordenado con todos los valores para cada clave, puedes crear primero un diccionario ordenado vacío y luego iterar a través de las claves en el diccionario desordenado original. Para cada clave, puedes luego iterar a través de los valores y agregarlos al diccionario ordenado con la clave como clave y el valor como valor. Aquí tienes un ejemplo de cómo puedes modificar el código para lograr esto:
Este código modificado crea un nuevo diccionario ordenado vacío llamado
ordered_dict
. Luego, itera a través de las claves del diccionario desordenado original y obtiene todos los valores para cada clave usando el métodogetlist
. Para cada valor, lo agrega alordered_dict
con la clave como clave y el valor como valor usando el métodosetdefault
. Finalmente, devuelve elordered_dict
con todos los valores para cada clave.