true - python model model




Флеш просто приложение, а не весь проект (3)

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


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

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

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

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

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

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

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


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




django-models