2013-11-23 66 views
3

我有以下型號:「ProgrammingError:列‘music_album’關係‘genre_id’不存在」,而列確實存在

class CulturalDocument(CacheMixin, models.Model): 
    ... 
    uuid = UUIDField(unique=True) 


class Genre(CulturalDocument): 
    name = models.CharField(max_length=32) 
    ... 

class Album(CulturalDocument): 
    ... 
    genre = models.ForeignKey(Genre, null=True, blank=True) 

我加入了genre屬性與南方遷移。

我可以使用pg_admin在表music_album中看到列genre_id

然而,當我這樣做:

album = Album.objects.create(uuid=3, 
           release_date=datetime(2000, 1, 1), 
           title="Fantastic Album", 
           right_holder=rh) 

我得到:

"ProgrammingError: column "genre_id" of relation "music_album" does not exist" while the column does exist 
LINE 1: ..._id", "title", "release_date", "right_holder_id", "genre_id"... 
.               ^

使用的是Postgres 9.2和1.6的Django在Ubuntu 12.04。

生成的SQL是:

INSERT INTO "music_album" ("culturaldocument_ptr_id", "title", "release_date", "right_holder_id", "genre_id") VALUES (%s, %s, %s, %s, %s) 
+0

確實存在嗎?什麼是'select * from information_schema.columns'的輸出,其中table_name ='music_album'' – alko

+0

這將返回(0行)。但是,'music_album'確實存在,因爲我在其中存儲數據並從中檢索數據。 –

回答

0

那麼從我所看到的你的代碼:

album = Album.objects.create(uuid=3, 
          release_date=datetime(2000, 1, 1), 
          title="Fantastic Album", 
          right_holder=rh) 

是通過4個元素而表需要5(你缺少genre_id)。請嘗試:

album = Album.objects.create(uuid=3, 
          release_date=datetime(2000, 1, 1), 
          title="Fantastic Album", 
          right_holder=rh, 
          genre_id=VALID_ID) 

其中VALID_ID是該流派的有效值。

+0

'genre_id'可以通過其在模型中的定義爲空 – alko

+0

它可以爲null,並且錯誤是genre_id在'music_album'中不存在,而不是在查詢中未提供。以防萬一我用有效的流派進行測試,並得到相同的錯誤。 –

5

找到了!

我得到這個錯誤運行單元測試。當我遷移時,我在常規db上應用遷移,但單元測試使用不同的db。我的測試工具Py.test被設置爲刷新表,但不會在測試之間刪除它們,以加快速度。因此,測試表使用遷移前存在的方案。我剛剛刪除它們並強制py.test重新創建它們。

+0

很高興你解決了它。 –

+0

謝謝!我遇到了同樣的問題。這是小事。 –

+0

呃我一直堅持這個好幾個小時,感謝張貼這個! :d – Liz

相關問題