Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flush just an app not the whole project

python manage.py flush removes data from the entire project. I would like to be able to do python manage.py flush agivenapp How can I do this?

like image 913
Timothy Clemans Avatar asked Apr 23 '11 21:04

Timothy Clemans


3 Answers

sqlclear management command can be helpful...

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

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

for the postgresql you can do:

./manage.py sqlclear myapp | psql dbname

UPDATE for apps with migrations and Django 1.7+:

python manage.py migrate <app> zero
like image 167
Jerzyk Avatar answered Nov 17 '22 20:11

Jerzyk


You can do this with the migrate command which takes two positional arguments:

Updates database schema. Manages both apps with migrations and those without.

positional arguments:

app_label
App label of an application to synchronize the state.
migration_name
Database state will be brought to the state after that migration. Use the name "zero" to unapply all migrations.

So running a migrate zero followed by a migrate will clear only the data for the given app.

$ python manage.py migrate ${APPNAME} zero
$ python manage.py migrate ${APPNAME}    
like image 33
Chris Seymour Avatar answered Nov 17 '22 20:11

Chris Seymour


For later versions of Django try in the Django shell:

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()

More on the apps module can be found here. Of course, you could convert this to a management command yourself using the management infrastructure.

like image 37
Floris den Hengst Avatar answered Nov 17 '22 19:11

Floris den Hengst