首页 > 解决方案 > Django Auth:“此字段是必需的”

问题描述

我想将我自己的表单集成到 django Auth 系统中。它总是抛出一个错误:

登录 此字段为必填项。密码 此字段为必填项。

设置调试点if request.method == 'POST':不起作用(页面启动/加载除外)。

设置.py:

AUTH_USER_MODEL = 'Immo.ImmoUser'

ImmoUser 类:

from django.contrib.auth.models import AbstractUser

class ImmoUser(AbstractUser):
    pass

形式:

<form class="form-signin" action="index" method="post" style="/*! height: 100%; */margin-top: 20%;">
  <img class="mb-4" src="{% static 'Immo/images/houses.png' %}" style="background-color: black; padding: 5px;border-radius: 10px;" alt="" width="72" height="72">
  <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>

  {% csrf_token %}

     {{ form.errors }}
  <label class="sr-only" for="{{ form.username.auto_id }}">{{ form.username.label }}:</label>

     <input id="{{ field.username }}" class="form-control" style="margin-bottom:3px;" autofocus="" placeholder="Login*" required="" type="text">


  <label class="sr-only" for="{{ form.password.auto_id }}">{{ form.password.label }}:</label>
     <input id="{{ field.password }}" class="form-control" style="margin-bottom:3px;" autofocus="" placeholder="Password*" required="" type="password">


  <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  <p class="mt-5 mb-3 text-muted">© 2017-2018</p>
</form>

视图.py:

def mylogin(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=raw_password)
            return redirect('Immo/user/index')
    else:
        form = UserCreationForm()
    return render(request, 'Immo/index.html',  {'form': form} )

编辑: 这有效:

<form class="form-signin" action="index" method="post" style="/*! height: 100%; */margin-top: 20%;">
  <img class="mb-4" src="{% static 'Immo/images/houses.png' %}" style="background-color: black; padding: 5px;border-radius: 10px;" alt="" width="72" height="72">
  <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>

  {% csrf_token %}

 {{ form.errors }}
  <label class="sr-only" for="{{ form.login.auto_id }}">{{ form.login.label }}:</label>

     <input name="login" id="{{ form.login.auto_id }}" class="form-control" style="margin-bottom:3px;" autofocus="" placeholder="Login*" required="" type="text">


  <label class="sr-only" for="{{ form.password.auto_id }}">{{ form.password.label }}:</label>
     <input name="password" id="{{ form.password.auto_id }}" class="form-control" style="margin-bottom:3px;" autofocus="" placeholder="Password*" required="" type="password">


  <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  <p class="mt-5 mb-3 text-muted">© 2017-2018</p>
</form>

标签: django

解决方案


您缺少以下属性名称inputs

 <input name="username" ...>

 <input name="password" ...>

推荐阅读