Tengo un problema con Django 1.2.4.Django: la columna DatabaseError no existe
Aquí es un modelo:
class Foo(models.Model):
# ...
ftw = models.CharField(blank=True)
bar = models.ForeignKey(Bar, blank=True)
Justo después de tirar de la base de datos, uso el 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...
¿qué estoy haciendo mal aquí?
Actualización: Si hago un comentario al ForeignKey
, el problema desaparece.
Actualización 2: Curiosamente, esta prueba la unidad funciona bien:
def test_foo(self):
f = Foo()
f.save()
self.assertTrue(f in Foo.objects.all())
¿Por qué funciona aquí, pero no en la concha?
Actualización 3: La razón por la que trabaja en la unidad de pruebas, pero no la cáscara puede tener algo que ver con las diferentes bases de datos que se utiliza:
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'
}
}
Actualización 4: Confirmó que cuando uso SQLite3 como db, todo funciona bien.
Para ser claros, ha ejecutado 'syncdb' en una base de datos vacía, o ha editado manualmente el esquema? Parece que eres consciente de que un modelo modificado no actualizará automáticamente la tabla ... pero solo asegúrate de – Robert
Sí, ejecuté 'syncdb'. –
Solo quiero estar 100% seguro de que no es un problema de base de datos existente: ¿ha descartado su base de datos de postgres y la ha vuelto a crear? Definitivamente he visto problemas persistentes cuando las personas intentan 'flush' o syncdbs parciales. La razón por la que pregunto es porque esto levantaría una peste si un simple 2 modelo de campo no creara columnas correctamente en postgresql_psycopg2. Además, ¿ha comprobado si 'foo_foo.bar_id' existe en' dbshell'? ¡Cuanta más información, mejor! –