Also mein Django Buch ist zurück an der Universität und ich habe Schwierigkeiten, diese eine zu arbeiten.Django Subclassing Multiwidget - Rekonstruktion Datum auf Post mit benutzerdefinierten Multiwidget
habe ich django.forms.widgets.MultiWidget
wie so subclassed:
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)
Was mir ein geschicktes Dattel Auswahlfeld wie so gibt: wirklich
Mein queston ist sehr einfach. Als ich sagte, Formular senden, um seine Handhabung Methode (die ein Verfahren wie folgt verwendet:
forminstance = ModelNameForm(request.POST, instance=modelinstance)
if forminstance.is_valid():
forminstance.save()
Dies schlägt fehl, weil Django nicht weiß, wie mein Multi-Widget zu nehmen und sie zurück in den zugrunde liegenden Feldtyp umwandeln, der in models.py
zu DateField()
, klar festgelegt
Nun werden die Kommentare um die MultiWidget in der django Quelle geben Sie mir diesen nützlichen Hinweis.
Sie werden wahrscheinlich wollen diese Klasse verwenden, mit MultiVal EUField.
Aber die Sache ist - ich wahrscheinlich nicht. Ich möchte meine DateField()
behalten, weil es sehr nützlich ist und es keinen Sinn hat, es zu duplizieren. Was ich dann tun muss, besteht irgendwie darin, diese mehreren Felder wieder in eine einzige gültige Datenfolge (yyyy-mm-dd
) zum Einfügen in die Datenbank umzuwandeln.
Meine Frage ist dann:
Wie? Was ist der beste Weg, dies zu erreichen?