Django Model: drop a field

我是研究僧i 提交于 2020-06-12 08:29:06

问题


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

  1. edit the models.py file and delete the column from the class
  2. BASH PROMPT$ python manage.py schemamigration core --auto
  3. MYSQL PROMPT> alter table core_tablename drop column xyz_json_old; commit;
  4. BASH PROMPT$ python manage.py core



回答3:


You can use South.

  • Edit your settings.py and put 'south' into INSTALLED_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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!