Vous pouvez également utiliser un nouveau widget: Je l'ai fait pour que je puisse avoir un widget qui a créé un affichage de texte d'une date et une forme cachée avec la même date dedans, ainsi elle pourrait être visible à l'utilisateur, mais ils ne peuvent pas la changer.
Voici une première (toujours tester/être nettoyé) 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
Vous utilisez ensuite ce dans le domaine comme (widget=DayLabelWidget,)
.
Merci - je l'avais vu .label mais pas .initial. Curieusement, .initial n'est même pas mentionné dans le document "Travailler avec des formulaires". – ine
.initial ne fonctionne que la première fois que le formulaire est présenté, non? Par exemple, s'il y a des erreurs et que vous présentez à nouveau le formulaire, il n'y aura pas d'initiale dans mon expérience. – dfrankow
Dans la terminologie Django, cela ne fonctionne qu'avec des formes non liées. Que faire si vous voulez que cela fonctionne avec des formes non liées et liées? – dfrankow