Django: DatabaseError la colonne n'existe pas

Je vais avoir un problème avec Django 1.2.4.

Ici est un modèle:

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

Droite après la purge de la base de données, j'utilise le 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...

Ce que je fais mal?

Mise à jour: Si j'commentaire la ForeignKey, le problème disparaît.

Mise à jour 2: Curieusement, ce test fonctionne très bien:

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

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

Pourquoi ça fonctionne ici, mais pas dans le shell?

Mise à jour 3: La raison pour laquelle il travaille dans l'unité de test, mais pas de la coque peut avoir quelque chose à voir avec les différentes bases de données utilisées:

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'
        }
    }

Mise à jour 4: Confirmé que, lorsque je utiliser SQLite3 que la db, tout fonctionne bien.

Pour être clair, vous n'avez syncdb sur une base de données vide, ou de la main-d'éditer le schéma? Il semble que vous êtes au courant qu'un modèle modifié de ne pas mettre à jour automatiquement la table... mais seulement de s'assurer que
Ouais, j'ai couru syncdb.
Je veux juste être sûr à 100%, ce n'est pas une base de données existante question: avez-vous abandonné votre base de données postgres et re-créé? J'ai certainement vu persistante questions quand les gens essaient flush ou partielle syncdbs. La raison que je demande, c'est parce que cela susciterait une puanteur si un simple 2 modèle de champ n'ai pas de créer des colonnes correctement sur postgresql_psycopg2. Aussi, avez-vous vérifié si foo_foo.bar_id existe dans dbshell? L'info plus on est de fous!
"colonne foo_foo.bar_id n'existe pas" - est-il un tableau "foo_foo" avec une colonne "bar_id"?
Une alternative à la réinitialisation de la bd (comme Bjorn correctement points) est à utiliser dans le Sud pour les migrations - south.aeracode.org/docs/installation.html. Il est extrêmement simple à utiliser et si vous avez besoin d'un guide étape par étape, c'est un bon post à lire: mitchfournier.com/2010/06/23/...

OriginalL'auteur Nick Heiner | 2011-01-14