2012-07-17 138 views
0

我正在使用ModelForm,但没有使用Django的身份验证系统。我也尝试设置一个随机密码,但已经注释掉了,因为我不确定它是否会导致问题。Django表单提交,但不会保存到数据库

目前,以下将返回'成功',但不会保存到数据库。

def registration(request): 
if request.POST: 
    data = request.POST.copy() 
    data['date_joined'] = datetime.date.today() 
    data['last_login'] = datetime.datetime.now() 
    form = UserForm(data) 
    if form.is_valid(): 
     try: 
      User.objects.get(username=form.cleaned_data['username']) 
     except User.DoesNotExist: 
      #ran_pw = User.objects.make_random_password(length=12) 
      #user.set_password(ran_pw) 
      user = User() 
      user.username = form.cleaned_data['username'] 
      user.first_name = form.cleaned_data['first_name'] 
      user.m_init = form.cleaned_data['m_init'] 
      user.last_name = form.cleaned_data['last_name'] 
      user.institution = form.cleaned_data['institution'] 
      user.department = form.cleaned_data['department'] 
      user.phone = form.cleaned_data['phone'] 
      user.email = form.cleaned_data['email'] 
      user.save() 
      return HttpResponse('success') 
    else: 
     return HttpResponse(form.errors) 
else: 
    form = UserForm() 
    return HttpResponse(form.non_field_errors) 

回答

0

大概在用户已经存在于数据库中时会发生这种情况。这是因为您只在用户不存在时才真正设置数据。将所有字段设置代码移回一个缩进级别。

实际上,您不应该手动设置字段 - 使用ModelForm的全部要点是您要做form = UserForm(data, instance=user),然后如果表单有效,您只需执行form.save()

+0

这是我在别处找到的建议。这个想法是,它检查用户名是否存在,然后只保存注册表,如果不存在。我用随机的,唯一的名字来测试它,所以不知道它为什么表现得好像用户已经存在一样。它可以工作,如果我跳过检查用户名是否存在。 – charmarel 2012-07-17 22:16:17

+1

因此,只需确保,打印一张照片,看看它获得了什么用户 – 2012-07-17 23:30:19

相关问题