【问题标题】:Django form submits, but won't save to databaseDjango表单提交,但不会保存到数据库
【发布时间】:2012-07-16 21:33:40
【问题描述】:

我使用的是 ModelForm,但没有使用 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)

【问题讨论】:

    标签: django django-models django-forms django-views mysql-python


    【解决方案1】:

    这可能发生在用户已经存在于数据库中时。那是因为您仅在用户不存在时才实际设置数据。将所有字段设置代码移回一个缩进级别。

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

    【讨论】:

    • 这是我在别处找到的建议。这个想法是它检查用户名是否存在,如果不存在则只保存注册表单。我正在使用随机的唯一名称对其进行测试,因此不确定为什么它的行为就像用户已经存在一样。如果我跳过检查用户名是否存在,它会起作用。
    • 所以为了确定,打印出来看看它得到了什么用户
    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2020-08-29
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多