492 Stimmen

Wie löscht man einen Datensatz in Django-Modellen?

Ich möchte einen bestimmten Datensatz löschen. Wie zum Beispiel

delete from table_name where id = 1;

Wie kann ich dies in einem Django-Modell tun?

13 Stimmen

Ich stimme @Freedom_Ben zu, aber für künftige Leser, die das f*-Handbuch sowieso mögen, ist das genau das Richtige: docs.djangoproject.com/de/dev/topics/db/queries/

9voto

Ashish Nautiyal Punkte 651

En delete() Diese Methode wird verwendet, um Modellinstanzen aus einer Datenbank zu löschen. Diese Methode löscht das Objekt sofort.

Beispiel:

Um einen Datensatz zu löschen:

data_to_be_deleted = Modelname.objects.get(fieldname = value)
data_to_be_deleted.delete()

Als get-Methode gibt ein einzelnes Objekt aus queryset nur einzigen Datensatz gelöscht werden. Wenn Wert geliefert existiert nicht, wird dies einen Fehler auslösen. Wenn es multilpe Datensätze in der Tabelle für den gleichen Wert dann auch wird es einen Fehler auslösen, so gute Praxis ist es, einen einzigen eindeutigen Wert zu verwenden, während mit get.

Zur Löschung mehrerer Datensätze gemäß einer Bedingung:

Bei der bedingungsbasierten Löschung wird die Filtermethode auf die Abfrage angewendet und dann der Löschvorgang aufgerufen.

data_to_be_deleted = Modelname.objects.filter(fieldname = value)
data_to_be_deleted.delete()

Um alle Datensätze zu löschen:

Um alle Modellinstanzen/Datensätze aus der Datenbanktabelle zu löschen, müssen Sie die Methode delete für alle

data_to_be_deleted = Modelname.objects.all()
data_to_be_deleted.delete()

Hinweis: Der Code kann in einer einzigen Zeile geschrieben werden als Modelname.objects.all().delete() aber zum besseren Verständnis habe ich mehrere Zeilen verwendet.

4voto

Sunderam Dubey Punkte 1790

Sie können auch Folgendes verwenden get_object_or_404() zu verwenden, anstatt direkt get() da wir bei der Verwendung von get() explizit den Fehler 404 auslösen.

Aber bei der Verwendung von get_object_or_404 wird sie automatisch durchgeführt.

get_object_or_404 Nach 4.0 docs, Ruft get() auf ein bestimmtes Modell-Manager, aber es wirft Http404 anstelle des Modells DoesNotExist Ausnahme.

Verwenden Sie es wie:

Für die Massenlöschung:

AnyModel.objects.filter(id=id).delete()

Um eine einzelne Instanz zu löschen, verwenden Sie get_object_or_404() anstelle von get() auf die folgende Weise:

instance=get_object_or_404(anyModel,id=id)
instance.delete()

Wenn nicht gefunden, wird automatisch 404 ausgegeben.

2voto

Radwan Abu-Odeh Punkte 1747

Es ist so einfach wie der folgende Aufruf.

SomeModel.objects.get(pk=1).delete()
# Or
SomeModel.objects.filter(pk=1).delete()

# SQL equivalent
# delete from table_name where id = 1;

Falls Sie mehrere Datensätze auf der Basis von id entfernen möchten, verwenden Sie die __in Abfrage Nachschlagen

SomeModel.objects.fitler(pk__in=[1,2,3,4,5,...]).delete()

# SQL equivalent
# delete from table_name where id in (1,2,4,5,...);

Wenn Sie alle Datensätze löschen wollen, verwenden Sie .all() um alle Abfragen abzurufen, dann .delete() .

SomeModel.objects.all().delete()

# SQL equivalent
# delete from table_name;

1voto

lionel Punkte 98

So mache ich es:

instance = SomeModel.objects.get(id=1)

instance.delete()

Für mich sieht es leicht verständlich aus, deshalb verwende ich diesen Ansatz.

0voto

Sie können die Objekte direkt über das Admin-Panel löschen. Es gibt auch die Möglichkeit, bestimmte oder ausgewählte IDs über eine interaktive Shell zu löschen, indem Sie die Shell python3 manage.py (python3 in Linux) eingeben. Wenn Sie möchten, dass der Benutzer die Objekte über den Browser (mit der zur Verfügung gestellten visuellen Schnittstelle) löscht, z. B. einen Mitarbeiter mit der ID 6 aus der Datenbank, können wir dies mit dem folgenden Code erreichen, emp = employee.objects.get(id=6).delete()

Dadurch wird der Mitarbeiter mit der ID 6 gelöscht.

Wenn Sie anstelle von get() alle in der DB vorhandenen Mitarbeiter löschen möchten, geben Sie all() wie folgt an: employee.objects.all().delete()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X