Tak więc moja książka django powraca na uniwersytet i staram się to rozwiązać.Dywizji podrzędnej Django - rekonstrukcji daty na post przy użyciu niestandardowej multiwidget
Mam podklasy django.forms.widgets.MultiWidget
tak:
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)
co daje mi ładne patrząc pole wyboru daty tak:
Moja Queston jest naprawdę bardzo proste. Kiedy przesłać formularz powiedział do swojego sposobu obsługi (który wykorzystuje proces takiego:
forminstance = ModelNameForm(request.POST, instance=modelinstance)
if forminstance.is_valid():
forminstance.save()
nie to, ponieważ Django nie wiedzą jak brać moje multi-widget i przekształcić ją z powrotem do bazowego typu pola, który jest ustawiony w models.py
do DateField()
wyraźnie
teraz komentarze wokół MultiWidget w źródle django dać mi tę użyteczną wskazówkę.
prawdopodobnie będziesz chciał skorzystać z tej klasy z MultiVal ueField.
Ale chodzi o to - prawdopodobnie nie. Chcę zachować mój DateField()
, ponieważ jest bardzo użyteczny i nie ma sensu go duplikować. To, co muszę zrobić, to przekonwertować te wiele pól z powrotem do jednego prawidłowego datownika (yyyy-mm-dd
) w celu wstawienia do bazy danych.
Moje pytanie brzmi:
Jak? Jaki jest najlepszy sposób, aby to osiągnąć?