【发布时间】:2021-01-16 15:19:45
【问题描述】:
I have a custom template where you have to put (first_name, last_name, email, password1, password2) for registration --> no username. I tried to use CserCreationForm in the below form but it is not workin, at the end after feeding up the form with data, nothing happens by clicking on submit. Could you please advice where is the problem? Thanks in advance guys!
forms.py - 我创建了继承自 USerCreationForm 的 SignUpForm,因此我需要占位符__init_ 方法
class SignUpForm(UserCreationForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'username', 'email', 'password1', 'password2', )
def __init__(self, *args, **kwargs):
super(SignUpForm, self).__init__(*args, **kwargs)
self.fields['first_name'].widget.attrs['placeholder'] = 'Imie'
self.fields['last_name'].widget.attrs['placeholder'] = 'Nazwisko'
self.fields['email'].widget.attrs['placeholder'] = 'Email'
self.fields['password1'].widget.attrs['placeholder'] = 'Hasło'
self.fields['password2'].widget.attrs['placeholder'] = 'Powtórz Hasło'
def save(self, commit=True):
user = super(SignUpForm, self).save(commit=False)
user.first_name = self.cleaned_data["first_name"]
user.last_name = self.cleaned_data["last_name"]
user.username = self.cleaned_data["first_name"]
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
views.py - 这里我使用的是 django 提供的:)
class RegisterView(CreateView):
form_class = SignUpForm
template_name = "register.html"
success_url = "login"
模板:我有一个模板,其中有几个字段要填写,如顶部所述,因此我没有使用简单的 {{form.as_table},并且用户名不是强制性名称,它应该是和名字一样
{% extends 'base.html' %}
{% block content %}
{% load static %}
<body>
{% block header %} {% endblock %}
{% block slogan %} {% endblock %}
<section id = "register" class="login-page">
<h2>Załóż konto</h2>
<form method="POST" action="">
{% csrf_token %}
<div class="form-group">
{{form.first_name}}
</div>
<div class="form-group">
{{form.last_name}}
</div>
<div class="form-group">
{{form.email}}
</div>
<div class="form-group">
{{form.password1}}
</div>
<div class="form-group">
{{form.password2}}
</div>
<div class="form-group form-group--buttons">
<a href="login.html" class="btn btn--without-border">Zaloguj się</a>
<button class="btn" type="submit">Załóż konto</button>
</div>
</form>
</section>
</body>
{% endblock %}
urls.py
path('register/', RegisterView.as_view(), name = "register")
【问题讨论】:
-
我认为您不需要在保存方法中手动设置 first_name 等。但是您应该在此保存方法中加密密码,例如:
user.set_password(self.cleaned_data["password1"])
标签: django-forms django-registration