Sie können auch ein neues Widget verwenden: Ich habe das so, dass ich ein Widget haben könnte, die eine Textanzeige eines Datums erstellt, und eine versteckte Form mit das gleiche Datum darin, also könnte es für den Benutzer sichtbar sein, aber sie können es nicht ändern.
Hier ist eine erste (noch/Prüfung bereinigt werden) Version:
class DayLabelWidget(forms.Widget):
def render(self, name, value, attrs):
final_attrs = self.build_attrs(attrs, name=name)
if hasattr(self, 'initial'):
value = self.initial
if type(value) == type(u''):
value = datetime.date(*map(int, value.split('-')))
return mark_safe(
"%s" % value.strftime("%A (%d %b %Y)")
) + mark_safe(
"<input type='hidden' name='%s' value='%s' />" % (
name, value
)
)
def _has_changed(self, initial, data):
return False
Sie dann dies als (widget=DayLabelWidget,)
auf dem Gebiet verwendet werden.
Danke - ich hatte .label gesehen, aber nicht .initial. Seltsamerweise wird .initial nicht einmal im Dokument "Arbeiten mit Formularen" erwähnt. – ine
.initial funktioniert nur beim ersten Mal das Formular präsentiert wird, oder? Zum Beispiel, wenn es Fehler gibt und Sie das Formular erneut präsentieren, wird es keine Initiale in meiner Erfahrung geben. – dfrankow
In der Django-Terminologie funktioniert dies nur mit ungebundenen Formularen. Was ist, wenn Sie möchten, dass es sowohl mit ungebundenen als auch mit gebundenen Formularen funktioniert? – dfrankow