Multiwidget de subclases de Django: reconstrucción de la fecha en la publicación usando un widget múltiple personalizado

Así que mi libro de django está de regreso en la universidad y estoy luchando por resolverlo.

He subclasificadodjango.forms.widgets.MultiWidget al igual que:

class DateSelectorWidget(widgets.MultiWidget):
    def __init__(self, attrs=None, dt=None, mode=0):  
        if dt is not None:
            self.datepos = dt
        else:
            self.datepos = date.today()    

        # bits of python to create days, months, years
        # example below, the rest snipped for neatness.

        years = [(year, year) for year in year_digits]

        _widgets = (
            widgets.Select(attrs=attrs, choices=days), 
            widgets.Select(attrs=attrs, choices=months),
            widgets.Select(attrs=attrs, choices=years),
            )
        super(DateSelectorWidget, self).__init__(_widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.day, value.month, value.year]
        return [None, None, None]

    def format_output(self, rendered_widgets):
        return u''.join(rendered_widgets)

Lo que me da un campo de selección de fecha ingenioso como este:

Mi queston es muy simple en realidad. Cuando envío dicho formulario a su método de manejo (que utiliza un proceso como este:

forminstance = ModelNameForm(request.POST, instance=modelinstance)
    if forminstance.is_valid():
        forminstance.save()

Esto falla porque Django no sabe cómo tomar mi widget múltiple y convertirlo de nuevo al tipo de campo subyacente, que se establece enmodels.py aDateField(), claramente.

Ahora, los comentarios sobre el MultiWidget en la fuente django me dan esta pista útil:

Probablemente quiera usar esta clase con MultiValueField.

Pero la cosa es que probablemente no. Quiero mantener miDateField() porque es muy útil y no tiene sentido duplicarlo. Lo que necesito hacer es convertir de alguna manera estos campos múltiples en una sola cadena de fecha válida (yyyy-mm-dd) para su inserción en la base de datos.

Mi pregunta es entonces:

¿Cómo? ¿Cuál es la mejor manera de lograr esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta