2012-02-17 1 views
12

Je ne peux pas sembler comprendre comment gérer la situation suivante correctement dans Django:Comment représenter deux champs de modèle en tant que champ de formulaire dans Django?

J'ai une plage de dates dans un modèle, que je stocke sous forme de deux champs distincts, date_start et date_end:

start_date = models.DateTimeField() 
end_date = models.DateTimeField() 

Dans la forme pour ce modèle, je veux représenter cela comme un champ, avec une étiquette:

timespan = forms.Field(widget=widgets.SelectDateRangeWidget(), label="Date Range") 

comme il est maintenant, je poste terminé MultiWidget pour créer le SelectDateRangeWidget:

class SelectDateRangeWidget(forms.MultiWidget): 
    ... 

qui intègre alors deux Date widgets. Je veux utiliser cela, mais ensuite le nettoyer dans deux champs de modèle distincts, et également préserver la capacité de charger les données initiales dans le champ de formulaire. Est la seule façon de définir manuellement initial à la valeur de ces deux champs à chaque fois, peut-être dans la fonction __init__ du formulaire, et également manuellement le nettoyer dans ces deux champs de modèle, ou est-il un moyen plus propre (pour ainsi dire) fais ça?

+0

Je ne vois pas quel est le problème: extraire vos deux dates, et les stocker dans le modèle. – Marcin

+0

@marcin: Comment définir la valeur 'initial' à la valeur des deux champs du modèle d'une manière logique et sans modifier la fonction __init__ du formulaire? Est-ce que je manque juste quelque chose d'évident? –

+0

Quel est le problème avec la définition du paramètre 'initial' à chaque champ? – Marcin

Répondre

10

Il semble que ce ne soit pas possible dans django en utilisant l'API widgets actuelle. Le billet est l'un des plus anciens billets django, il a 7 ans: https://code.djangoproject.com/ticket/27.

Vous pouvez exclure les 2 champs d'origine du formulaire modèle, créer un nouveau champ et remplacer la méthode de sauvegarde du formulaire.

+2

Merci! Je ne peux pas croire que j'ai trébuché sur une demande ancienne et encore non résolue –

+0

Savez-vous quelle est la dernière mise à jour à cela? – Algorithmatic

Questions connexes