Evite crear objetos duplicados en Django

Salman Mehmood 20 junio 2023
Evite crear objetos duplicados en Django

Este artículo abordará el método get_or_create() en Django. Un método utilizado para evitar campos redundantes en nuestro conjunto de consultas.

Usa el método get_or_create() en Django

En Django, tenemos una forma de evitar obtener o crear código definido usando el método get_or_create(). Cuando creamos objetos duplicados varias veces, este método nos ayuda a evitar crearlos varias veces.

try:
    friend = Friend.objects.get(name="Harry jeams")
except DoesNotExist:
    friend = Friend(name="Harry jeams")
    friend.save()

En este bloque, cuando obtenemos un objeto amigo de nuestro conjunto de consultas, supongamos que no podemos encontrar este objeto, entonces tratamos de crear este objeto. Si vamos a recibir varias solicitudes para ejecutar otras instrucciones simultáneamente, parece una situación de carrera.

Es posible que el proceso genere una excepción ya que no existe ningún objeto en el conjunto de consultas porque se han creado objetos múltiples y duplicados debido a la creación de subprocesos.

Tenemos una manera eficiente de usar correctamente el método get_or_create, y este método responde rápidamente con una sola operación.

friend, friend_to_friend = Friend.objects.get_or_create(name="Harry jeams")

Lo primero que hace el método get_or_create() es intentar obtener un objeto utilizando el método get(). Desafortunadamente, si el primer intento no logra obtener un objeto, creará un objeto en nuestro conjunto de consultas.

Si la salida muestra un "IntegrityError", solo obtendrá un objeto y lo devolverá. Si ambos procesos se ejecutan simultáneamente y obtienen instrucciones para procesar e intentar crear un objeto, ambos crearán objetos que serían el objeto duplicado en nuestro conjunto de consultas.

Dado que esto creará duplicados, necesitamos el objeto único en nuestro campo de modelo.

class Friend(models.Model):
    friend_first_name = models.CharField(max_length=255)
    friend_last_name = models.CharField(max_length=255)


friend, friend_to_friend = Friend.objects.get_or_create(
    first_name="Harry", last_name="jeams"
)

El siguiente código funciona para obtener y crear un objeto único en el conjunto de consultas.

Ejemplo de código:

class Friend(models.Model):
    friend_first_name = models.CharField(max_length=255)
    friend_last_name = models.CharField(max_length=255)

    class SubClass:
        unique = ("first_name", "last_name")


friend, friend_to_friend = Author.objects.get_or_create(
    first_name="Harry", last_name="jeams"
)

La función get_or_create() de Django devuelve dos variables. El primero es un objeto y el segundo es una variable booleana.

A veces solo necesitamos obtener el objeto que devuelve, por lo que usamos esta sintaxis.

Sintaxis:

friend, friend_to_friend = Friend.objects.get_or_create(
    name="Harry jeams", defaults={"list_of_friend": 0, "place": "college"}
)

Si solo tenemos un campo en nuestro conjunto de consultas, podemos usar defaults__exact en lugar del parámetro predeterminado en el método get_or_create().

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Django Object