Подтвердить что ты не робот

Выполнить только приложение, а не весь проект

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

4b9b3361

Ответ 1

Команда управления 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

Ответ 2

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

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

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

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

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

$ python manage.py migrate ${APPNAME} zero
$ python manage.py migrate ${APPNAME}    

Ответ 3

Для более поздних версий 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 можно найти здесь. Конечно, вы можете преобразовать это в команду управления самостоятельно, используя инфраструктуру управления .

Ответ 4

Мне также нужно было что-то, чтобы пустить только определенные приложения. Я придумал это решение. Это работало для 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