“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
字段是从Idea
到User
的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’错误的主要内容,如果未能解决你的问题,请参考以下文章