Vermeiden Sie es, doppelte Objekte in Django zu erstellen

Salman Mehmood 20 Juni 2023
Vermeiden Sie es, doppelte Objekte in Django zu erstellen

Dieser Artikel befasst sich mit der Methode get_or_create() in Django. Eine Methode, die verwendet wird, um redundante Felder in unserem Abfragesatz zu vermeiden.

Verwenden Sie die get_or_create()-Methode in Django

In Django haben wir eine Möglichkeit, definierten Get- oder Create-Code mit der Methode get_or_create() zu vermeiden. Wenn wir mehrfach doppelte Objekte erstellen, hilft uns diese Methode, die mehrfache Erstellung zu vermeiden.

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

Wenn wir in diesem Block ein “Freund”-Objekt aus unserem Abfragesatz erhalten, nehmen wir an, wir könnten dieses Objekt nicht finden, dann versuchen wir, dieses Objekt zu erstellen. Wenn wir mehrere Anfragen zur gleichzeitigen Ausführung anderer Anweisungen erhalten, sieht es nach einer Rennsituation aus.

Es ist möglich, dass der Prozess eine Ausnahme auslöst, da kein Objekt im Abfragesatz vorhanden ist, da aufgrund von Threading mehrere und doppelte Objekte erstellt wurden.

Wir haben eine effiziente Möglichkeit, die Methode get_or_create korrekt zu verwenden, und diese Methode reagiert schnell mit einer einzigen Operation.

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

Als Erstes versucht die Methode get_or_create(), ein Objekt mit der Methode get() zu erhalten. Wenn beim ersten Versuch kein Objekt abgerufen werden kann, wird leider ein Objekt in unserem Abfragesatz erstellt.

Wenn die Ausgabe einen "IntegrityError" anzeigt, wird nur ein Objekt abgerufen und zurückgegeben. Wenn beide Prozesse gleichzeitig ausgeführt werden und Anweisungen erhalten, ein Objekt zu verarbeiten und zu versuchen, ein Objekt zu erstellen, erstellen beide Objekte, die das doppelte Objekt in unserem Abfragesatz wären.

Da dies zu Duplikaten führt, benötigen wir das eindeutige Objekt in unserem Modellfeld.

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

Der folgende Code dient zum Abrufen und Erstellen eines eindeutigen Objekts im Abfragesatz.

Codebeispiel:

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

Die Funktion get_or_create() von Django gibt zwei Variablen zurück. Das erste ist ein Objekt und das zweite eine boolesche Variable.

Manchmal müssen wir nur das zurückgegebene Objekt abrufen, also verwenden wir diese Syntax.

Syntax:

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

Wenn wir nur ein Feld in unserem Abfragesatz haben, können wir defaults__exact anstelle des Standardparameters in der get_or_create()-Methode verwenden.

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

Verwandter Artikel - Django Object