【问题标题】:Django Model: drop a fieldDjango 模型:删除一个字段
【发布时间】:2014-01-07 12:35:57
【问题描述】:

有没有一种直接干净的方法可以从 Django 模型中删除一个字段?对于添加字段,迁移工作完美,但它不适用于删除引发以下错误

django.db.utils.DatabaseError: (1060, "Duplicate column name 'xyz_json_old'")

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    如果你只想从模型中删除字段,试试这个

    $ python manage.py dbshell 
    

    您将直接在您的数据库外壳(mysql 或 psql)中获取到什么数据库 你正在使用。

    $ mysql> | psql> ALTER TABLE <table_name> DROP column <COLUMN_NAME>;
    

    也打开模型(python文件)并从模型中取出字段名称并立即输入

    $ python manage.py syncdb
    

    它会将列从表中删除,无论表是否已填充。

    【讨论】:

    • 谢谢。写完我的步骤后才注意到你的评论。
    【解决方案2】:

    我正在使用南方,但我仍然必须在朋友的帮助下完成以下操作 -

    他说我一定是搞砸了,南方的一些内部步骤不是原子的

    1. 编辑 models.py 文件并从类中删除该列
    2. BASH PROMPT$ python manage.py schemamigration core --auto
    3. MYSQL 提示> 更改表 core_tablename 删除列 xyz_json_old;提交;
    4. BASH PROMPT$ python manage.py core

    【讨论】:

      【解决方案3】:

      您可以使用South

      • 编辑您的settings.py 并将'south' 放入INSTALLED_APPS(假设您已将其安装到正确的位置)
      • 运行./manage.py syncdb 将South 表加载到数据库中。请注意,syncdb 现在看起来不同了 - South 对其进行了修改。
      • 运行./manage.py convert_to_south myapp -South 将自动生成并假装应用您的第一次迁移。

      然后编辑你的models.py,然后

      ./manage.py schemamigration --auto myapp
      

      他们迁移:

      ./manage.py migrate myapp
      

      【讨论】:

      • 我怀疑他已经在使用 South,我认为他正在尝试迁移,这就是他遇到错误的地方。他可能需要 --fake 迁移
      • 这个答案已经过时了。
      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 2019-03-11
      • 2015-02-19
      • 2021-10-05
      • 2015-09-26
      • 2018-05-03
      • 2017-01-31
      • 1970-01-01
      相关资源
      最近更新 更多