मुझे Django 1.2.4 के साथ कोई समस्या है।Django: डेटाबेस एरर कॉलम मौजूद नहीं है
यहाँ एक मॉडल है:
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...
क्या मैं गलत कर रहा हूँ यहाँ:
class Foo(models.Model):
# ...
ftw = models.CharField(blank=True)
bar = models.ForeignKey(Bar, blank=True)
सही डेटाबेस निस्तब्धता के बाद, मैं खोल का उपयोग करें?
अद्यतन: यदि मैं ForeignKey
पर टिप्पणी करता हूं, तो समस्या गायब हो जाती है।
अद्यतन 2: मजे की बात है, इस इकाई परीक्षण बस ठीक काम करता है:
def test_foo(self):
f = Foo()
f.save()
self.assertTrue(f in Foo.objects.all())
क्यों इसे यहाँ लेकिन खोल में नहीं काम करता है?
अद्यतन 3: कारण यह इकाई परीक्षण में काम करता है, लेकिन नहीं खोल विभिन्न डेटाबेस के साथ कुछ हो सकता है इस्तेमाल किया जा रहा:
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'
}
}
अपडेट करें: पुष्टि की गई है कि जब मैं SQLite3 को डीबी के रूप में उपयोग करता हूं, तो सब कुछ ठीक काम करता है।
स्पष्ट होने के लिए, आपने खाली डेटाबेस पर 'syncdb' चलाया है, या स्कीमा को हाथ से संपादित किया है? ऐसा लगता है कि आप जानते हैं कि एक संशोधित मॉडल स्वचालित रूप से तालिका को अपडेट नहीं करेगा ... लेकिन बस सुनिश्चित करें कि – Robert
हाँ, मैं 'syncdb' चला गया। –
मैं सिर्फ 100% सुनिश्चित करना चाहता हूं कि यह मौजूदा डेटाबेस समस्या नहीं है: क्या आपने अपना पोस्टग्रेज़ डेटाबेस गिरा दिया है और इसे फिर से बनाया है? जब लोग 'फ्लश' या आंशिक सिंकडब्स का प्रयास करते हैं तो मैंने निश्चित रूप से मुद्दों को देखा है। कारण मैं पूछता हूं क्योंकि अगर एक साधारण 2 फ़ील्ड मॉडल ने postgresql_psycopg2 पर स्तंभों को सही तरीके से नहीं बनाया है तो यह एक बदबू आ जाएगा। साथ ही, क्या आपने जांच की है कि 'doohell' में 'foo_foo.bar_id' मौजूद है या नहीं? अधिक जानकारी मर्फी! –