Odpowiedzi:
Wewnątrz menedżera:
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, )
tego kawałka, pozostawiając stół pusty, ale nietknięty.
Zgodnie z najnowszą dokumentacją prawidłową metodą wywołania byłoby:
Reporter.objects.all().delete()
delete
wywoływana jest metoda instancji , podczas gdy przy delete
wywołaniu QuerySet
nie jest.
Jeśli chcesz usunąć wszystkie dane ze wszystkich tabel, możesz wypróbować polecenie python manage.py flush
. Spowoduje to usunięcie wszystkich danych w tabelach, ale same tabele nadal będą istnieć.
Zobacz więcej tutaj: https://docs.djangoproject.com/en/1.8/ref/django-admin/
Django 1.11 usuwa wszystkie obiekty z tabeli bazy danych -
Entry.objects.all().delete() ## Entry being Model Name.
Zapoznaj się z oficjalną dokumentacją Django, jak podano poniżej - https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects
Należy zauważyć, że metoda delete () jest jedyną metodą QuerySet, która nie jest ujawniana w samym menedżerze. Jest to mechanizm bezpieczeństwa, który zapobiega przypadkowemu zażądaniu Entry.objects.delete () i usunięciu wszystkich wpisów. Jeśli chcesz usunąć wszystkie obiekty, musisz jawnie zażądać pełnego zestawu zapytań:
Sam wypróbowałem fragment kodu widoczny poniżej w moim 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)
a wewnątrz views.py
mam widok, który po prostu renderuje stronę html ...
def data_del_4(request):
obj = calc_2() ##
obj.del_model_4()
return render(request, 'dc_dash/data_del_4.html') ##
zakończyło usuwanie wszystkich wpisów z - model == model_4, ale teraz widzę ekran błędu w konsoli administracyjnej, gdy próbuję stwierdzić, że wszystkie obiekty modelu_4 zostały usunięte ...
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"
Weź pod uwagę, że - jeśli nie przejdziemy do konsoli ADMIN i nie spróbujemy zobaczyć obiektów modelu - które zostały już usunięte - aplikacja Django działa tak, jak powinna.
Jest kilka sposobów:
Aby usunąć go bezpośrednio:
SomeModel.objects.filter(id=id).delete()
Aby usunąć go z instancji:
instance1 = SomeModel.objects.get(id=id)
instance1.delete()
// nie używaj tej samej nazwy