2014-12-20 91 views
0

編輯:Django的版本1.6.1Django的外鍵不能正常工作

我不斷收到試圖通過管理來創建一個RedditPost對象時,這個錯誤:

no such column: subreddit_id 

subreddit_id錯誤引用RedditPost.subreddit(未版(Subreddit) .subreddit),然後由於某種原因在最後添加了一個_id

參考文獻沒有問題。當試圖從admin創建RedditPost時,Subreddits的下拉菜單將顯示所有可用的Subreddits對象。

class Subreddit(models.Model): 
    subreddit  = models.CharField(max_length=100, primary_key=True) 
    title   = models.CharField(max_length=100, null=False) 

    def __unicode__(self): 
     return smart_unicode(self.subreddit) 

class RedditPost(models.Model): 
    comments_link = models.CharField(max_length=256, primary_key=True) 
    submitted_link = models.CharField(max_length=256, null=False) 
    rank    = models.IntegerField(null=False) 
    title   = models.CharField(max_length=100, null=False) 
    reddit_timestamp = models.DateTimeField(null=False) 
    updated_at  = models.DateTimeField(auto_now_add=True, auto_now=True) 
    subreddit  = models.ForeignKey('Subreddit') 

議決/ SOLUTION:我最後用「沖洗」,這並沒有清理數據庫,當我(我沒有使用任何遷移)所做的更改。我不得不使用:

python manage.py sqlclear "app_name" | python manage.py dbshell 

完全清除數據庫,然後我不得不請點擊此鏈接(Django South error with initial migration)做正確遷移。

+0

django版本?你是否在第二步添加了RedditPost.subreddit? – sax

+1

@Alds我知道縮進代碼的樣式看起來非常整齊,但PEP-8建議不要這樣做 – jamylak

+0

因此您在'RedditPost'模型中添加了'models.ForeignKey('Subreddit')'字段,但是您還沒有完成模式在數據庫上遷移? – Anentropic

回答

5

_id是由Django自動添加的。有對它的妄想。

你的數據庫表RedditPost亙古不只是有此列任何..

改變表(通過添加這個新列),之後做:

如果Django的版本< 1.7:要安裝(south需求)

python manage.py schemamigration yourapp --auto 
    python manage.py migrate yourapp 

如果django的版本> = 1.7:

python manage.py makemigrations 
    python manage.py migrate 
+0

我認爲將主鍵設置爲comment_link會使該表在引用RedditPost中的_id時引用該列?它實際上似乎在尋找Reddit Post的外鍵_id。該錯誤顯示爲:「no no column:gallery_redditpost.subreddit_id」 – Alds