0

我正在尝试在网站上注册一个新用户,

class UserInfo(models.Model):
    user = models.ForeignKey(User,primary_key=True)#user profile
    email_id=models.CharField(max_length=32, null=True, blank=True)   

当我注册用户时,我遇到了Integrity Error,请帮助我解决问题。

def registration(request):
    registration_dict = {}
    if 1==1 :
    #if request.POST:
        #username=request.POST['email']
        #password=request.POST['password']
        username="admin@admin.com"
        password='123456'
        #try:
        UserInfo.objects.get_or_create(email_id=username,user__username=username,user__email=username,user__password=password)
        #except:
          #  registration_dict["status"]="0"
         #   registration_dict["message"]="Username already present"
           # return HttpResponse(simplejson.dumps(registration_dict),content_type="application/json")  

        registration_dict["status"]="1"
        registration_dict["message"]="Thank You for registering"
        return HttpResponse(simplejson.dumps(registration_dict),content_type="application/json") 
    else:
        registration_dict["status"]="0"
        registration_dict["message"]="Unable to process the request"
        return HttpResponse(simplejson.dumps(registration_dict),content_type="application/json")    

编辑 1 我尝试更改 UserInfo.objects.get_or_create(email_id=username,user__username=username,user__email=username,user__password=password,user_id=1) 然后错误更改为

'Cannot add or update a child row: a foreign key constraint fails (`app_info`.`appdata_userinfo`, CONSTRAINT `user_id_refs_id_b0fd803b` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')
4

3 回答 3

1

如果原来的 User 对象不存在,你会遇到各种各样的问题。因此,您需要将过程分为两个步骤。

  1. 检查一个User对象是否存在,如果它没有创建它。
  2. 检查该用户UserInfo的对象是否存在,如果它没有创建它。

由于有ForeignKey,您不能一步完成:

username = "admin@admin.com"
password = '123456'

obj, created = User.objects.get_or_create(username=username)
obj.set_password(password) # the proper way to set the password
obj.save()

# Now fetch or create a UserInfo object
info, created = UserInfo.objects.get_or_create(email_id=username,user=obj)
于 2013-07-22T08:02:26.937 回答
1

从有限的信息来看,我想说的问题是它没有找到匹配的 UserInfo。然后它尝试创建一个新的 UserInfo,但它没有用户可以分配给用户 ForeignKey。我建议如下:

user = authenticate(username=email, password=password)
if user is None:
     user = User(username=email, password=password, email=email)
user_info = UserInfo.objects.get_or_create(user=user, email_id=email)
于 2013-07-22T08:05:47.137 回答
1

我不明白您为什么需要 UserInfo,因为用户中已经存在电子邮件。可以通过拆分获取过程来纠正问题

username = "admin@admin.com"
password = '123456'

user,status = User.objects.get_or_create(username=username, password=password)
user_info = UserInfo.objects.get_or_create(user=user,email_id=username)
于 2013-07-22T08:23:40.260 回答