¿Cómo utilizar "get_or_create()" en Django?

Resuelto Stephen asked hace 15 años • 8 respuestas

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".

Stephen avatar Dec 21 '09 23:12 Stephen
Aceptado

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")
Astra avatar Dec 21 '2009 16:12 Astra

get_or_createdevuelve una tupla.

customer.source, created = Source.objects.get_or_create(name="Website")
Tobu avatar Dec 21 '2009 16:12 Tobu

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 de get_or_create()método.

Tushar Patil avatar Oct 28 '2013 09:10 Tushar Patil