gpt4 book ai didi

python - Django:DatabaseError 列不存在

转载 作者:太空狗 更新时间:2023-10-29 20:39:09 26 4
gpt4 key购买 nike

我在使用 Django 1.2.4 时遇到问题。

这是一个模型:

class Foo(models.Model):
# ...
ftw = models.CharField(blank=True)
bar = models.ForeignKey(Bar, blank=True)

刷新数据库后,我立即使用 shell:

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from apps.foo.models import Foo
>>> Foo.objects.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 67, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 82, in __len__
self._result_cache.extend(list(self._iter))
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 271, in iterator
for row in compiler.results_iter():
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 677, in results_iter
for rows in self.execute_sql(MULTI):
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/compiler.py", line 732, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/util.py", line 15, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
return self.cursor.execute(query, args)
DatabaseError: column foo_foo.bar_id does not exist
LINE 1: ...t_omg", "foo_foo"."ftw", "foo_foo...

我在这里做错了什么?

更新:如果我注释掉 ForeignKey,问题就会消失。

更新 2:奇怪的是,这个单元测试工作得很好:

def test_foo(self):
f = Foo()
f.save()

self.assertTrue(f in Foo.objects.all())

为什么它在这里工作而不是在 shell 中?

更新 3:它在单元测试中起作用但在 shell 中不起作用的原因可能与所使用的不同数据库有关:

settings.py:

DATABASES = {
'default': {
'ENGINE': 'postgresql_psycopg2',
'NAME': 'foo',
'USER': 'bar',
'PASSWORD': 'baz',
'HOST': '',
'PORT': '',
}
}

import sys
if 'test' in sys.argv or True:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'testdb'
}
}

更新 4:确认当我使用 SQLite3 作为数据库时,一切正常。

最佳答案

在运行 syncdb 之前尝试完全删除/删除数据库。

我记得不久前我更改外键字段时需要这样做。

关于python - Django:DatabaseError 列不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4687275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com