【发布时间】:2017-07-28 09:39:39
【问题描述】:
使用通用视图时,您会获得 django 的简洁功能,可以在模板中发布错误消息,例如“此字段是必需的!”。
据我了解,CreateView 继承了一个名为 form_invalid 的方法,该方法返回 self.render_to_response(self.get_context_data(form=form)) 而我只是猜测这就是魔法?
现在我正在编写一个表单,想知道是否也可以使用该功能?
我创建了一个 custom_user 模型,并尝试创建一个简单的创建功能。到目前为止,我得到了:
模型.py
class Custom_User(AbstractBaseUser):
email = models.EmailField(max_length=250, unique=True)
password = models.CharField(max_length=100)
USERNAME_FIELD = 'email'
forms.py
class create_User_Form(forms.ModelForm):
confirm_password = forms.CharField(widget = forms.PasswordInput(attrs={'class' :'form-control'}))
class Meta:
model = Custom_User
fields = ['email', 'password']
widgets = {
'email' : forms.TextInput(attrs={'class' :'form-control'}),
'password' : forms.PasswordInput(attrs={'class' :'form-control'}),
}
def clean(self):
cleaned_data = super(create_User_Form, self).clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_password")
if password != confirm_password:
raise forms.ValidationError(
"password and confirm_password does not match"
)
return self.cleaned_data
urls.py
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^create_user/$', views.create_user, name='create_user'),
]
views.py
def create_user(request):
form = create_User_Form(request.POST)
if form.is_valid():
print('valid')
else:
print('error')
return redirect('Eapp:index')
def index(request):
create_user_form_ = create_User_Form()
context = {
'create_user_form' : create_user_form_,
}
return render(request, 'index.html', context)
【问题讨论】:
-
看看
CreateView中的docs。您可以在 View 类中指定form_class。 -
@gitblame 我不太了解文档,对此感到抱歉。我已经使用呈现我的索引页面的视图功能编辑了我的帖子。这就是我想在其中显示 CreateView 的那个。这会使事情变得更加复杂吗?
-
如果你需要一些教程,我推荐观看thesegodjango关于CBVs的教程。
-
您可能需要了解基于类和基于函数的视图之间的区别。 docs.djangoproject.com/en/1.10/topics/class-based-views/intro
标签: django django-forms django-class-based-views