Django外键不起作用

时间:2014-12-20 08:39:03

标签: python django

编辑:Django版本1.6.1

尝试通过admin创建RedditPost对象时,我一直收到此错误:

no such column: subreddit_id

subreddit_id错误引用RedditPost.subreddit(不是Subreddit.subreddit),然后由于某种原因在最后添加_id

参考没有问题。尝试从管理员创建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')

已解决/解决方案:我结束使用“刷新”,当我进行更改时,我没有清理数据库(我没有使用任何迁移)。我不得不使用:

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

要完全清除数据库,然后我必须按照此链接(Django South error with initial migration)正确执行迁移。

2 个答案:

答案 0 :(得分:5)

Django会自动添加

_id。有它的理由。

您的数据库表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 

答案 1 :(得分:1)

我有同样的问题。删除db.sqlite3文件。然后在终端上,

python3 manage.py makemigrations
python3 manage.py migrate

就是这样。但是您所有保存的数据库值将被删除。