问题
Is there a straightforward clean way to drop a field from Django model? for addition of a field, migrate works perfect but its not working for deletion throwing the following error
django.db.utils.DatabaseError: (1060, "Duplicate column name 'xyz_json_old'")
回答1:
If you want to drop only the field from the model try this
$ python manage.py dbshell
You will get directly within your database shell (mysql or psql) it up to what database you are using.
$ mysql> | psql> ALTER TABLE <table_name> DROP column <COLUMN_NAME>;
Open the model too (the python file)and take off the field name from the model and type now
$ python manage.py syncdb
And it will drop the column to from table, doesn't matter if the table is already populated or not.
回答2:
I am using south but still I had to go through the following with the help of my friend -
He says I must have botched up something and some internal steps in south are not atomic
- edit the models.py file and delete the column from the class
- BASH PROMPT$ python manage.py schemamigration core --auto
- MYSQL PROMPT> alter table core_tablename drop column xyz_json_old; commit;
- BASH PROMPT$ python manage.py core
回答3:
You can use South.
- Edit your
settings.py
and put'south'
intoINSTALLED_APPS
(assuming you’ve installed it to the right place) - Run
./manage.py syncdb
to load the South table into the database. Note that syncdb looks different now - South modifies it. - Run
./manage.py convert_to_south myapp
-South will automatically make and pretend to apply your first migration.
Then edit your models.py
, and then
./manage.py schemamigration --auto myapp
them migrate:
./manage.py migrate myapp
来源:https://stackoverflow.com/questions/20971792/django-model-drop-a-field