Nic*_*ner 8 python database django models
我遇到了Django 1.2.4的问题.
这是一个模型:
class Foo(models.Model):
# ...
ftw = models.CharField(blank=True)
bar = models.ForeignKey(Bar, blank=True)
Run Code Online (Sandbox Code Playgroud)
刷新数据库后,我使用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...
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
更新:如果我发表评论ForeignKey,问题就会消失.
更新2:奇怪的是,这个单元测试运行得很好:
def test_foo(self):
f = Foo()
f.save()
self.assertTrue(f in Foo.objects.all())
Run Code Online (Sandbox Code Playgroud)
为什么它在这里工作但不在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'
}
}
Run Code Online (Sandbox Code Playgroud)
更新4:确认当我使用SQLite3作为数据库时,一切正常.
在运行syncdb之前尝试完全删除/擦除数据库.
我记得在我对外键字段进行更改时需要做一段时间.
小智 5
请在删除整个数据库之前阅读此内容
我有同样的问题。请完整阅读异常。我有一个 ModelForm 类,它从我的表中读取以构建一个表单,并且存在异常。我注释掉然后运行 makemigrations 并完全工作。之后,我评论了 ModelForm 类,一切正常。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
20725 次 |
| 最近记录: |