Django подклассифицирует мультивиджет - реконструирует дату в посте с помощью настраиваемого мультивиджета

Итак, моя книга по django вернулась в университет, и я изо всех сил пытаюсь разобраться с этой.

Я создал подкласс django.forms.widgets.MultiWidget так:

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)

Что дает мне отличное поле выбора даты, например: Nifty looking date selection thing

Мой квестон очень действительно просто. Когда я отправляю указанную форму в ее метод обработки (который использует такой процесс:

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

Это не удается, потому что Django не знает, как взять мой мульти-виджет и преобразовать его обратно в базовый тип поля, который установлен в models.py - DateField () , ясно.

Теперь комментарии вокруг MultiWidget в исходном коде django дают мне этот полезный совет:

Возможно, вы захотите использовать этот класс с MultiValueField.

Но дело в том, что я, вероятно, не хочу. Я хочу сохранить свой DateField () , потому что он очень полезен и нет смысла его дублировать. Что я необходимо каким-то образом преобразовать эти несколько полей обратно в единую допустимую строку даты ( гггг-мм-дд ) для вставки в базу данных.

Тогда мой вопрос:

Как? лучший способ добиться этого?

16
задан 11 January 2011 в 22:32
поделиться