¿Cómo utilizar "get_or_create()" en Django?
Estoy intentando utilizar get_or_create()
algunos campos de mis formularios, pero aparece un error 500 cuando intento hacerlo.
Una de las líneas se ve así:
customer.source = Source.objects.get_or_create(name="Website")
El error que recibo para el código anterior es:
No se puede asignar "(<Fuente: Sitio web>, Falso)": "Cliente.fuente" debe ser una instancia de "Fuente".
De la documentación get_or_create :
# get_or_create() a person with similar first names.
p, created = Person.objects.get_or_create(
first_name='John',
last_name='Lennon',
defaults={'birthday': date(1940, 10, 9)},
)
# get_or_create() didn't have to create an object.
>>> created
False
Explicación:
Los campos cuya similitud se evaluará deben mencionarse fuera de defaults
. El resto de campos deben incluirse en defaults
. En caso de que ocurra el evento CREATE, se tienen en cuenta todos los campos.
Parece que necesitas regresar a una tupla, en lugar de a una sola variable, haz lo siguiente:
customer.source,created = Source.objects.get_or_create(name="Website")
get_or_create
devuelve una tupla.
customer.source, created = Source.objects.get_or_create(name="Website")
get_or_create()
devuelve una tupla:
customer.source, created = Source.objects.get_or_create(name="Website")
created
→ tiene un valor booleano, se crea o no.customer.source
→ tiene un objeto deget_or_create()
método.