¿Cómo se configuran los resultados de una consulta de Django para igualar un nuevo conjunto de variables? por ejemplo, cuando ejecuto esta consulta en mi shell Django:

getDefaults = defaultParams.objects.filter(isDefault = True, device = 41)

Entonces corre:

for val in getDefaults.values():
    print(val)

Vuelve:

{'id': 2, 'device_id': 41, 'customerTag': 'ABCD001', 'isDefault': True}

Me gustaría utilizar los valores de este diccionario para guardar un nuevo registro en mi base de datos, pero ¿parece que no puedo extraer los valores del diccionario? Pensé que sería algo como:

device_id = getDefaults.device_id
NewCustomerTag = getDefaults.customerTag
0
MattG 16 oct. 2018 a las 18:42

2 respuestas

La mejor respuesta

values() devuelve explícitamente una lista de diccionarios, por lo que deberá utilizar la sintaxis del diccionario: val['device_id'].

Pero en su caso no hay razón para hacerlo. Omita la llamada values por completo y obtendrá una instancia de defaultParams en la que puede usar búsquedas de atributos normales:

for val in getDefaults:
    print(val.device_id)
1
Daniel Roseman 16 oct. 2018 a las 15:46

No puede hacer getDefaults.device_id ya que defaultParams.objects.filter devuelve una lista de objetos coincidentes.

Si está segura de obtener una única coincidencia, haga lo siguiente.

device_id = getDefaults[0].device_id
NewCustomerTag = getDefaults[0].customerTag

O

Puedes recorrer la lista y usar los datos de dict.

for val in getDefaults:
    device_id = val.device_id
    NewCustomerTag = val.customerTag

Si desea guardar la información del objeto recuperado como nuevo objeto, le sugiero el siguiente enfoque.

getDefaults = defaultParams.objects.filter(isDefault = True, device = 41)

getDefaults[0].pk = None

getDefaults[0].save()
1
kartheek 16 oct. 2018 a las 15:51