私がやろうとしていることは次のようなものです:
1)モデルを作成しました
class Example(models.Model):
username = models.CharField(max_lenght=111)
pass = models.CharField(max_lenght=111)
2)ModelFormを使用してフォームを作成し、フィールドを1つ追加しました
class ExampleForm(ModelForm):
extra_field= form.CharField(max_length=333)
class Meta:
model = Client
fields = ['username', 'pass']
3)このフォームを処理するためのビューを作成しました
class Registration(CreateView):
"""
View handles user registration.
"""
form_class = ExampleForm
model = Example
template_name = 'accounts/registration.html'
success_url = reverse_lazy('accounts:registered')
ここで私がやりたいのは、extra_fieldのカスタム処理を行うことです。これはExampleFormのsaveメソッドで実行する必要があることがわかりました。例えば:
def save(self, commit=True):
user = super(ExampleForm, self).save(commit=False)
data = self.cleaned_data['extra_field']
user.set_password(self.cleaned_data['pass'] + self.cleaned_data['extra_field'])
if commit:
user.save()
return user
しかし、これは機能しません。これはこの種の状況を処理する正しい方法ですか、それとももっと良い方法がありますか?最大の問題は、これが私のコードではないことです。そのため、ExampleFormのみを変更する必要があります。これを行う方法はありますか?
前もって感謝します。
よろしく、ニコラ
のform_valid()
メソッドでこれを行うことができますCreateView
。
class Registration(CreateView):
"""
View handles user registration.
"""
form_class = ExampleForm
model = Example
template_name = 'accounts/registration.html'
success_url = reverse_lazy('accounts:registered')
def form_valid(self, form):
example = form.save(commit=False)
example.extra_field = derive_data(form.cleaned_data)
example.save()
return super(Registration, self).form_valid(form)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加