我不明白为什么我的表单集无效

  • 本文关键字:表单 无效 明白 django
  • 更新时间 :
  • 英文 :


我想在我的项目中做一个注册面板。当我检查表单是否有效时,我得到False作为结果,不明白为什么。

下面是我的一些代码:

views.py:

@unauthorized_user
def registerPage(request):
form=createUserForm()
if request.method == 'POST':
form = createUserForm(request.POST)
print (form.is_valid())
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
group = Group.objects.get(name='user')
user.groups.add(group)
email = form.cleaned_data.get('email')
Customer.objects.create(user=user, name=username, email=email)
messages.success(request, 'Account created for ' + username)
print(group.user_set.all())
return redirect('login.html')
context={'form':form}
return render(request,'register.html',context)

模板:

<form action="" method="POST">
{% csrf_token %}
<div class="container">
<div class="Username-label">
<label><b>Username</b></label>
<input type="text" placeholder="Enter Username" required>
</div>
<div class="Password-label">
<label><b>Password</b></label>
<input type="password" placeholder="Enter Password"required>
</div>
<div class="Email-label">
<label><b>Email</b></label>
<input type="email" placeholder="Enter Email" required>
</div>
<button type="submit">Login</button>
</div>
</form>

models.py:

class Customer(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200, null=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)

没有看到您的createUserForm()类(这是验证正在执行的地方),我只能猜测您的问题可能是什么-您似乎也在使用登录模板来注册用户,这将不起作用。

无论如何,我建议尽可能多地使用内置的Django帐户管理系统,而不是尝试自己开发,因为你是新手。在这里可以找到一个很好的解释和代码示例。

如果你想扩展内置的DjangoUserCreationForm()类来添加你想要收集的自定义字段,你可以在你的forms.py中这样做:

from django import forms
from django.contrib.auth.models import User, Group
from django.contrib.auth.forms import UserCreationForm
from myapp.models import Customer

class UserCreateForm(UserCreationForm):
email = forms.CharField(max_length=255, required=True)
class Meta:
model = User
def save(self, commit=True):
user = super(UserCreateForm, self).save()
user_profile = UserProfile(user=user, email=self.cleaned_data['email'])
user_profile.save()
group = Group.objects.get(name='user')
user.groups.add(group)
Customer.objects.create(user=user, name=user.username, email=user_profile.email)
return user, user_profile

那么你的视图可能是这样的:

@unauthorized_user
def registerPage(request):
form=UserCreateForm()
if request.method == 'POST':
form = UserCreateForm(request.POST)
if form.is_valid():
user, user_profile = form.save()
messages.success(request, 'Account created for ' + user.username)
return redirect(reverse('login'))
context={'form':form}
return render(request,'register.html',context)

此外,您的HTML是错误的视图。它应该是这样的:

{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<form method="POST">
{% csrf_token %}

<div class="container">
<div class="Username-label">
<label><b>Username</b></label>
<input name="username" type="text" placeholder="Enter Username" required>
</div>

<div class="Password-label">
<label><b>Password</b></label>
<input name="password1" type="password" placeholder="Enter Password" required>
</div>
<div class="Password-label">
<label><b>Confirm Password</b></label>
<input name="password2" type="password" placeholder="Enter Password confirmation" required>
</div>

<div class="Email-label">
<label><b>Email</b></label>
<input name="email" type="email" placeholder="Enter Email" required>
</div>
<button type="submit">Sign Up</button>

</div>
</form>

最新更新