【发布时间】:2011-12-23 18:11:39
【问题描述】:
进入编辑 2
在views.py 中调用如下adduser 函数。我首先保存用户,因为它的 id(由 Django 在 INSERT 时自动创建)是帐户和密码的主键/外键。添加用户似乎工作正常,但是当它到达Accounts(user=u) 时,会抛出以下错误:
IntegrityError at /adduser
insert or update on table "OmniCloud_App_accounts" violates foreign key constraint "user_id_refs_id_468fbcec324e93d2"
DETAIL: Key (user_id)=(4) is not present in table "OmniCloud_App_user".
但是密钥应该在那里,因为它只是将用户保存到数据库中......
def adduser(request):
username = request.POST['username']
password = request.POST['password']
u = User.objects.create_user(username, request.POST['email'], password)
u.save()
a = Accounts(user=u)
p = Passwords(user=u)
a.save()
p.save()
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
auth.login(request, user)
return HttpResponseRedirect("/%s/" %u.id)
else:
return HttpResponseRedirect("/account/invalid/")
编辑:这是帐户初始化的开始:
from django.db import models
from django.contrib.auth.models import User
class Accounts(models.Model):
user = models.ForeignKey(User)
编辑 2 通过进入管理页面,我意识到当它抱怨 4 不在数据库中时,那是因为它正在添加第三个用户。添加第 4 个用户会引发一个错误,即没有 id 为 5 的用户(duh)。我在代码中没有看到任何会导致它搜索 user_id+1 的任何想法
到战争基金!
【问题讨论】:
-
Accounts 是什么对象?
-
Accounts 是一个类似于 User 的模型,只是有大量不同的字段用于社交、媒体和电子邮件用户名。
-
u.save()不需要,因为create_user()应该已经将其提交到数据库。您可能应该在 Accounts 模型中显示 user 字段。你有自己的用户模型吗? -
user = models.ForeignKey(User)用户模型是 Django 的默认值。您确定 create_user 保存了吗?我之前在一次初始化所有三个表然后保存时遇到了问题,因为它显示了类似的东西,在创建帐户或密码之前推送 u.save() 修复它。 -
您是否使用位于 contrib.auth.models 中的用户模型?因为错误说:“OmniCloud_App_user”而不是“OmniCloud_auth_user”
标签: python django postgresql django-views