What is the correct method for validating input for a custom multiwidget in each of these cases:
- if I want to implement a custom Field?
- if I want to use an existing database field type (say DateField)?
The motivation for this comes from the following two questions:
I am specifically interested in the fact that I feel I have cheated. I have used value_from_datadict()
like so:
def value_from_datadict(self, data, files, name):
datelist = [widget.value_from_datadict(data, files, name + '_%s' % i) for i, widget in enumerate(self.widgets)]
try:
D = date(day=int(datelist[0]), month=int(datelist[1]), year=int(datelist[2]))
return str(D)
except ValueError:
return None
Which looks through the POST
dictionary and constructs a value for my widget (see linked questions). However, at the same time I've tacked on some validation; namely if the creation of D
as a date object fails, I'm returning None
which will fail in the is_valid()
check.
My third question therefore is should I be doing this some other way? For this case, I do not want a custom field.
Thanks.