“django 视图中的未知列‘user_id’错误

Posted

技术标签:

【中文标题】“django 视图中的未知列‘user_id’错误【英文标题】:"Unknown column 'user_id' error in django view 【发布时间】:2010-09-22 12:57:18 【问题描述】:

我遇到了一个错误,我不确定是什么原因造成的。

这是错误:

Exception Type:     OperationalError
Exception Value:    
(1054, "Unknown column 'user_id' in 'field list'")

有人知道我为什么会收到这个错误吗?我想不通。一切似乎都很好。

我的查看代码如下:

if "login" in request.session:
    t = request.POST.get('title', '')
    d = request.POST.get('description', '')
    fid = request.session["login"]
    fuser = User.objects.get(id=fid)
    i = Idea(user=fuser, title=t, description=d, num_votes=1)
    i.save()
    return HttpResponse("true", mimetype="text/plain")
else:
    return HttpResponse("false", mimetype="text/plain")

感谢您的帮助!谢谢!

编辑:也是一个附带问题。是使用objects.get(id=还是objects.get(pk=?如果使用主键,需要在模型中声明id字段还是索引?

编辑:以下是相关模型:

class User (models.Model):
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    email = models.CharField(max_length=200)
    password = models.CharField(max_length=200)

class Idea (models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=255)
    num_votes = models.IntegerField()

【问题讨论】:

【参考方案1】:

是的,我放下了桌子,一切都很好。但是,您必须实际进入数据库并删除它们。 “manage.py flush”或“manage.py reset appname”不会自己做。

-尼克奥

【讨论】:

【参考方案2】:

    user_id 字段是从IdeaUser 的FK 引用。看起来你改变了你的模型,没有更新你的数据库,那么你就会遇到这种问题。

    删除旧表,重新运行 syncdb。

    默认情况下,您的模型表会获得一个 id 字段。您可以在查询中调用它id。也可以使用pk的同义词。

    如果您自己定义主键字段,则不会自动获得id 字段。但是您仍然可以使用pk 来引用主键。

【讨论】:

"pk" 不是 ID 的同义词,它指定主键列(可能我命名不同)。如果您不知道(或不想)主键列的确切名称,这将非常方便。 docs.djangoproject.com/en/dev/topics/db/queries/…。 PK 表示 PK,可以是您在模型中定义的 PK,也可以是默认 PK,即 ID。【参考方案3】:

您必须展示您的模型才能获得真正的帮助,但您的 Idea 表似乎没有 user_id 列?是否修改了 SQL 表结构?

【讨论】:

我没有触及SQL表结构。我将我的模型添加到问题中以显示它。我多次运行syncdb。 syncdb 不会改变表结构,它只能创建不存在的表。因此,如果您更改模型,您仍然会有旧表,并且需要删除表并重新创建它们(或手动更改它们)。 太棒了!谢谢你。我删除了所有的表,它工作正常。 看看south.aeracode.org 的南方项目。这是所有 django 项目的必备工具,也是 syncdb 无聊东西的终结。它也在 PYPI 中,因此您可以通过 PIP 安装它。享受吧! 这不能回答问题。 (是的,我知道它很旧,但显然仍然相关。)@S 下面的答案。 Lott 是真正的解决方案。

以上是关于“django 视图中的未知列‘user_id’错误的主要内容,如果未能解决你的问题,请参考以下文章