{{{
# views.py
def test_view(request):
form = TestForm(
request.POST or { 'text': 'some text'},
)
data = {
'form': form,
}
print 'before rendering'
return render(request, 'test.html', data)
# forms.py
class TestForm(forms.Form):
text = forms.CharField()
def __init__(self, *args, **kwargs):
print 'init'
super(TestForm, self).__init__(*args, **kwargs)
def clean(self):
print 'in clean'
}}}
and this template:
{{{
#test.html
<form id='test-form' method="post" action="some url"
enctype="multipart/form-data">
{{ form.as_p }}
<input type="submit" value="Save"/>
</form>
}}}
when i send get request to this file i have this output in console:
> before rendering
> init
> in clean
when I write {{ form.text }} instead of {{ form.as_p }} I have only:
> before rendering
> init
It seams to me that as_p method calls clean() internally in process of
rendering template.
Is it a bug or some undocumented feature?
Should this side effect avoided?
Version of Django==1.5.1
--
Ticket URL: <https://code.djangoproject.com/ticket/20703>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* status: new => closed
* needs_docs: => 0
* resolution: => invalid
* needs_tests: => 0
* needs_better_patch: => 0
Comment:
I think you want to use `initial={'text': 'some text'}` when initializing
`TestForm` rather than `request.POST or {'text': 'some text'}`, but this
ticket tracker isn't the place to get help with this, thanks!
https://code.djangoproject.com/wiki/TicketClosingReasons/UseSupportChannels
--
Ticket URL: <https://code.djangoproject.com/ticket/20703#comment:1>
Comment (by max.kharandziuk@…):
I don`t ask a help with this code I just mentioned that as_p method has
some side effect(calls clean()) that not described in documentation. Maybe
this effect is a bug
--
Ticket URL: <https://code.djangoproject.com/ticket/20703#comment:2>
Comment (by timo):
`as_p` will output error rows (if any) as well as non-field errors.
Naturally, this requires calling `clean`. Since you are passing data to
the form on `GET`, the form is validated and `clean` is called.
--
Ticket URL: <https://code.djangoproject.com/ticket/20703#comment:3>