Флеш просто приложение, а не весь проект - PullRequest
20 голосов
/ 24 апреля 2011

python manage.py flush удаляет данные из всего проекта.Я хотел бы иметь возможность сделать python manage.py flush agivenapp Как я могу это сделать?

Ответы [ 4 ]

13 голосов
/ 24 апреля 2011

Команда управления sqlclear может быть полезна ...

Usage: ./manage.py sqlclear [options] <appname appname ...>

Prints the DROP TABLE SQL statements for the given app name(s).

для postgresql вы можете сделать:

./manage.py sqlclear myapp | psql dbname

UPDATE для приложений с миграциями и Django 1.7 +:

python manage.py migrate <app> zero
10 голосов
/ 08 апреля 2016

Это можно сделать с помощью команды migrate, которая принимает два позиционных аргумента:

Обновляет схему базы данных.Управляет как приложениями с миграциями, так и приложениями без.

позиционных аргументов:

app_label
Метка приложения для синхронизации состояния.
имя_перемещения
Состояние базы данных будет приведено в состояние после этой миграции.Используйте имя «ноль» для отмены всех миграций.

Таким образом, выполнение нуля миграции с последующей миграцией очистит только данные для данного приложения.

$ python manage.py migrate ${APPNAME} zero
$ python manage.py migrate ${APPNAME}    
2 голосов
/ 08 января 2016

Для более поздних версий Django попробуйте в оболочке Django:

from django.apps import apps
my_app = apps.get_app_config('my_app_name')
my_models = my_app.get_models()
for model in my_models:
    model.objects.all().delete()

Подробнее о модуле apps можно найти здесь . Конечно, вы можете преобразовать это в команду управления самостоятельно, используя инфраструктуру управления .

0 голосов
/ 09 октября 2012

Мне также нужно что-то, чтобы очистить только определенные приложения.Я придумал это решение.Это сработало для MySQL.Может случиться так, что код необходимо изменить для других баз данных.

Основная идея заключается не в том, чтобы выполнять полную очистку.Вместо этого я получаю только то, что хочу, с помощью grep из sqlflush.Вы также можете поместить все в одну строку.Для удобства чтения я разделил его.

BEGIN="BEGIN; SET FOREIGN_KEY_CHECKS = 0;"
TRUNCATE=`./manage.py sqlflush |egrep " \\\`app1_| \\\`app2_"`
END="SET FOREIGN_KEY_CHECKS = 1; COMMIT;"

echo $BEGIN $TRUNCATE $END | ./manage.py dbshell
...