2013-07-22 25 views
0

Я пытаюсь зарегистрировать новый пользователь на сайте,IntegrityError - Колонка «user_id» не может быть пустой

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

Когда я регистрация пользователя, я получаю застряло Ошибки целостности, пожалуйста, помогите мне решить проблему.

def registration(request): 
    registration_dict = {} 
    if 1==1 : 
    #if request.POST: 
     #username=request.POST['email'] 
     #password=request.POST['password'] 
     username="[email protected]" 
     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")  

EDIT 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`))') 
+0

Читали ли вы сообщение об ошибке? –

+0

Да, идентификатор пользователя является первичным ключом. Я добавляю нового пользователя, по умолчанию его автоматически увеличивается. Пожалуйста, исправьте меня, если я ошибаюсь – onkar

+0

'user_id' - это поле поддержки для' user', * not * the PK. –

ответ

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) 
1

Если исходный объект пользователя не существует, вы будете работать во все виды проблем. Итак, вам нужно разбить процесс на два этапа.

  1. Проверьте, существует ли объект User или нет, если он его не создает.
  2. Проверьте, существует ли объект UserInfoдля этого пользователя, если он его не создает.

Как есть ForeignKey, вы не можете сделать это в один шаг:

username = "[email protected]" 
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) 
+0

Но это позволит пользователю перезаписать предыдущий пароль пользователя. – mtnpaul

+0

Хорошая точка @mtnpaul - я просто отвечал на исходный вопрос OP. Я предполагаю, что он делает что-то разумное с этим. –

1

Я не могу понять, зачем вам нужна UserInfo, потому что электронная почта уже существует в User. Проблема может быть исправлена ​​путем разделения выборки процесса

username = "[email protected]" 
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) 
Смежные вопросы