Antworten:
In einem Manager:
def delete_everything(self):
Reporter.objects.all().delete()
def drop_table(self):
cursor = connection.cursor()
table_name = self.model._meta.db_table
sql = "DROP TABLE %s;" % (table_name, )
cursor.execute(sql)
'DELETE FROM %s' % (table_name, )
für dieses Bit verwenden und die Tabelle leer, aber intakt lassen.
Gemäß der neuesten Dokumentation wäre die richtige Methode zum Aufrufen:
Reporter.objects.all().delete()
delete
Methode der Instanz aufgerufen wird, während dies beim delete
Aufruf der Instanz nicht der Fall QuerySet
ist.
Wenn Sie alle Daten aus all Ihren Tabellen entfernen möchten, können Sie den Befehl versuchen python manage.py flush
. Dadurch werden alle Daten in Ihren Tabellen gelöscht, die Tabellen selbst sind jedoch weiterhin vorhanden.
Weitere Informationen finden Sie hier: https://docs.djangoproject.com/de/1.8/ref/django-admin/
Django 1.11 löscht alle Objekte aus einer Datenbanktabelle -
Entry.objects.all().delete() ## Entry being Model Name.
Lesen Sie hier die offizielle Django-Dokumentation, wie unten angegeben - https://docs.djangoproject.com/de/1.11/topics/db/queries/#deleting-objects
Beachten Sie, dass delete () die einzige QuerySet-Methode ist, die in einem Manager selbst nicht verfügbar gemacht wird. Dies ist ein Sicherheitsmechanismus, der verhindert, dass Sie versehentlich Entry.objects.delete () anfordern und alle Einträge löschen. Wenn Sie alle Objekte löschen möchten, müssen Sie explizit einen vollständigen Abfragesatz anfordern:
Ich selbst habe das unten gezeigte Code-Snippet in meinem ausprobiert somefilename.py
# for deleting model objects
from django.db import connection
def del_model_4(self):
with connection.schema_editor() as schema_editor:
schema_editor.delete_model(model_4)
und innerhalb meiner habe views.py
ich eine Ansicht, die einfach eine HTML-Seite rendert ...
def data_del_4(request):
obj = calc_2() ##
obj.del_model_4()
return render(request, 'dc_dash/data_del_4.html') ##
Es löschte alle Einträge aus - model == model_4, aber jetzt wird ein Fehlerbildschirm in der Admin-Konsole angezeigt, wenn ich versuche festzustellen, dass alle Objekte von model_4 gelöscht wurden ...
ProgrammingError at /admin/dc_dash/model_4/
relation "dc_dash_model_4" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "dc_dash_model_4"
Bedenken Sie, dass die Django-App wie vorgesehen funktioniert, wenn wir nicht zur ADMIN-Konsole gehen und versuchen, bereits gelöschte Objekte des Modells anzuzeigen.
Es gibt verschiedene Möglichkeiten:
So löschen Sie es direkt:
SomeModel.objects.filter(id=id).delete()
So löschen Sie es aus einer Instanz:
instance1 = SomeModel.objects.get(id=id)
instance1.delete()
// benutze nicht den gleichen Namen