【发布时间】:2018-05-18 18:27:28
【问题描述】:
Postgresql、Django 2.0、Python 3.6.4
在运行将字段名称 desktop_pay 更改为简单的 pay 的迁移后,运行 manage.py test 时出现错误,提示 pay 列不存在。
这里是迁移:
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('instructions', '0055_auto_20180517_1508'),
]
operations = [
migrations.RenameField(
model_name='instruction',
old_name='desktop_pay',
new_name='pay',
),
]
这是错误:
> python .\manage.py test
Creating test database for alias 'default'...
Traceback (most recent call last):
File "C:\Python36\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: column instructions_instruction.pay does not exist
LINE 1: "...on"."quota", "instructions_instruction"."target", "instructi...
^
如果我启动 psql 提示,我可以清楚地看到该列确实存在,至少在“真实”表中。
mydatabase=> \d+ instructions_instruction
Table "public.instructions_instruction"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
---------------------+------------------------+-----------+----------+------------------------------------------------------+----------+--------------+-------------
id | integer | | not null | nextval('instructions_instruction_id_seq'::regclass) | plain | |
quota | smallint | | not null | | plain | |
pay | numeric(5,2) | | not null | | main | |
### etc...
这里发生了什么?为什么 Django 找不到该列?我该如何调试?
【问题讨论】:
-
您确定连接到正确的数据库吗? (我知道这是一个愚蠢的错误,但不知何故偶尔会发生)。
-
嘿,公平的问题,但是是的。我正在连接到我在
settings.py中定义的数据库。 -
是否有任何测试代码使用模型旧字段名称?或者任何派生类的模型?
-
不,旧字段名称
desktop_pay出现在我的代码中的唯一位置是在旧迁移中。 -
您尝试通过 django admin 更改实例,如果它抛出相同的错误?
标签: python django postgresql