Genericビューを使用すると、djangoのきれいな機能がテンプレートに「このフィールドは必須です!」というエラーメッセージを表示します。フォームはGenericViewのように検証されます
私が理解しているところから、CreateViewはform_invalid
というメソッドを継承しています。それはself.render_to_response(self.get_context_data(form=form))
を返します。そして、私はそれが魔法をやっていることを推測していますか?
私はフォームを書いていますが、その機能を使用することも可能かどうか疑問に思っていましたか?
私はcustom_userモデルを作成し、簡単な作成機能を作成しようとしています。これまでのところ私が持っている:
Models.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)
です。[docs](https://docs.djangoproject.com/en/1.10/ref/class-based-views/generic)の 'CreateView'を見てください。 -editing /#django.views.generic.edit.CreateView)。 Viewクラスで 'form_class'を指定することができます。 –
@gitblame私は本当にドキュメントを理解していない、それについてはごめんね。私はインデックスページをレンダリングするビュー関数を使って投稿を編集しました。それは私がCreateViewを表示したいものです。これは物事をさらに複雑にしますか? – vandelay
チュートリアルが必要な場合は、godjangoの[CBVs]チュートリアル[https://godjango.com/15-class-based-views-part-1-templateview-and-redirectview/]チュートリアルを見ることをおすすめします。 –