我使用PostGres通过PythonAnywhere创建了一个django博客项目,并且最近尝试通过git将我的更改(主要是实现Django-MPTT)推送到我的生产服务器。
我运行了迁移等,但是当我加载网站时,我收到服务器错误500.错误日志看起来有点像这样:
“/家/ DMells123 / .virtualenvs / nomadpadvenv / lib中/ python3.6 /站点包/ Django的/ DB /后端/ utils.py” 第65行,在执行#012中返回self.cursor.execute(sql, params)#012django.db.utils.ProgrammingError:column posts_category.lft 不存在#012LINE 1:... gory“。”parent_id“, “posts_category”。“parentSlug”,“posts_cat ......#012
原始错误表示category.name不存在,这是我添加到我的类别数据库的新字段(好吧,实际上我重命名了它)。我通过psql将此列添加到生产环境中的数据库:
(ALTER TABLE ADD COLUMN name varchar(200)
然后我得到另一列不存在,即上面的一列。这来自于最近使用Django-MPTT,我意识到我创建这些在我的模型中看不到的列是不够的。
我的问题是,我做错了吗?我理解我正在尝试将改变的MVT结构强加到我现有的博客帖子数据上,但有没有更简单的方法来解决这个问题?此错误将继续出现,但我不想做一个选择新列的数据类型的拙劣工作。我扫描了我的追溯并根据错误添加了列(noobinfo:我刚刚将varchar(200)应用于所有):
posts_category.name
posts_post.category_id
posts_category.parent_id
posts_category.lft
posts_category.right
posts_category.level
到目前为止,我已经添加了所有这些列,但现在我得到了:
"/home/DMells123/.virtualenvs/nomadpadvenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute#012 return self.cursor.execute(sql, params)#012django.db.utils.ProgrammingError: operator does not exist: character varying = integer#012LINE 1: ...osts_category" WHERE "posts_category"."parent_id" = (SELECT ...#012 ^#012HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
我现在已经超出了我的深度,需要你的帮助!
非常感谢。 大卫
修改
关注@solarisstorm建议:
我现在创建了一个手动迁移,目前为止添加了一个字段,即'name'列。那个错误现在已经消失了。下一个是:
列posts_category.parent_id不存在
当我将以下内容添加到新的迁移文件中时:
operations = [
migrations.AddField(
model_name="category",
name="parent_id",
field=("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='PARENT_ID')),
),
]
使用migrate命令时出现以下错误:
文件 “/home/DMells123/.virtualenvs/nomadpadvenv/lib/python3.6/site-packages/django/db/mig 在state_forwards中的rations / operations / fields.py“,第75行 delay = not field.is_relation AttributeError:'tuple'对象没有属性'is_relation'
我尝试在迁移文件中向我的字段添加is_relation ='parent',但这不起作用。 “有意想不到的关键字参数”。
非常感谢。