Ответы:
Внутри менеджера:
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/
Используя оболочку,
1) Для удаления таблицы:
python manage.py dbshell
>> DROP TABLE {app_name}_{model_name}
2) Для удаления всех данных из таблицы:
python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()
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()
// не используйте одно и то же имя