Відповіді:
Всередині менеджера:
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, )
для цього шматочок, залишивши стіл порожнім, але недоторканим.
Відповідно до останньої документації , правильним методом для виклику буде:
Reporter.objects.all().delete()
delete
метод екземпляра викликається, тоді як при delete
виклику на QuerySet
ньому немає.
Якщо ви хочете видалити всі дані з усіх своїх таблиць, ви можете спробувати команду python manage.py flush
. Це видалить усі дані у ваших таблицях, але самі таблиці все ще існуватимуть.
Детальніше дивіться тут: https://docs.djangoproject.com/en/1.8/ref/django-admin/
Django 1.11 видалити всі об'єкти з таблиці бази даних -
Entry.objects.all().delete() ## Entry being Model Name.
Дивіться офіційну документацію Django тут, як цитується нижче - https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects
Зауважте, що delete () - єдиний метод QuerySet, який не піддається впливу самого Менеджера. Цей механізм безпеки дозволяє запобігти випадковому запиту на Entry.objects.delete () та видаленню всіх записів. Якщо ви хочете видалити всі об'єкти, вам потрібно явно запитати повний набір запитів:
Я сам спробував фрагмент коду, який можна побачити нижче в моєму 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)
і в мене views.py
є погляд, який просто відображає сторінку HTML ...
def data_del_4(request):
obj = calc_2() ##
obj.del_model_4()
return render(request, 'dc_dash/data_del_4.html') ##
закінчилося видалення всіх записів з - model == model_4, але тепер я можу побачити екран помилок на консолі адміністратора, коли я намагаюся визначити, що всі об'єкти model_4 були видалені ...
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"
Вважайте, що - якщо ми не заходимо до консолі ADMIN і не спробуємо побачити об’єкти моделі, які вже видалені - додаток Django працює так, як задумано.
Є кілька способів:
Щоб видалити його безпосередньо:
SomeModel.objects.filter(id=id).delete()
Щоб видалити його з екземпляра:
instance1 = SomeModel.objects.get(id=id)
instance1.delete()
// не використовувати одне ім’я