Для чего-то подобного я бы порекомендовал создать собственную команду управления. Это позволит вам запустить код, используя manage.py <command name>
, как вы пытаетесь это сделать.
Документы находятся на https://docs.djangoproject.com/en/3.0/howto/custom-management-commands/
Таким образом, вы начнете с добавления Папка management
в каталоге вашего приложения, затем добавьте папку commands
в папку management
.
Внутри папки команд создайте файл для вашей команды - что-то вроде delete_all_news.py
. Вы запустите команду, используя имя файла (без расширения .py
), поэтому если вы назовете файл delete_my_stuff.py
, вы запустите его с manage.py delete_my_stuff
. Не начинайте имя файла с подчеркивания, иначе вы не сможете запустить его из командной строки (вы будете использовать эти файлы для поддержки файлов, которые вы не хотите использовать в качестве реальных команд - в вашем случае это не требуется).
Содержимое этого файла может быть примерно таким, как показано ниже (очевидно, в работе вы хотели бы обработать исключение и какое-то уведомление / запись в журнал, что команда выполнена успешно или не выполнена)
news /management/commands/delete_all_news.py
from django.core.management.base import BaseCommand, CommandError
from news.models import News
class Command(BaseCommand):
help = 'Delete all news items from database'
def handle(self, *args, **options):
News.objects.all().delete()
Затем запустите из командной строки команду manage.py delete_all_news
Также обратите внимание, что вы можете связать вызов delete()
с objects
фильтр - не нужно читать objects.all()
в переменную, а затем выполнять удаление, вы можете сделать все это одним оператором, если хотите.