Reputation: 2382
After successful validation, how can I redisplay a form with some error from a view?
Example: User filled the form correctly, but his IP has been banned, so he should see a proper error message. And I want it to be displayed as any other validation error.
class MyView(CreateView):
form_class = MyForm
model = MyModel
def form_valid(self, form):
banned = is_ip_banned(self.request)
if banned:
# add error message 'You have been banned'
# redisplay a form with defined errors
return super(MyView, self).form_valid(form)
Note that I cannot just override form.is_valid()
, because I need the request
variable.
Upvotes: 0
Views: 251
Reputation: 599630
If you need the request when validating the form, you should simply pass it in.
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(MyForm, self).__init__(*args, **kwargs)
def clean(self):
if is_ip_banned(self.request):
raise forms.ValidationError('You have been banned')
...
class MyView(forms.Form):
def get_form(self, form_class):
form_kwargs = self.get_form_kwargs()
form_kwargs['request'] = self.request
return form_class(**form_kwargs)
Upvotes: 1