Vous n'êtes pas identifié(e).
Bonjour,
Je souhaite créer un nouveau champ pour mes modèles, qui permette de
stocker un numéro de mois, mais qui soit rendu comme une liste
déroulante avec janvier, février, ..., décembre dans.
Dans mon models.py, j'ai donc fait :
class MonthField(models.IntegerField):
def __init__(self, *args, **kwargs):
locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
kwargs['choices'] = [(s, calendar.month_name[s]) for s in range(1, 13)]
super(MonthField, self).__init__(*args, **kwargs)
Puis dans mon modèle :
periodstart = MonthField(blank=True, null=True)
Ça marche très bien, ça stocke bien la valeur dans la base et ça
m'affiche effectivement une liste déroulante.
Par contre, quand je fais {{ monobjet.periodstart }} dans un template,
lors du rendu, ça m'affiche un numéro et pas le nom du mois
correspondant à ce numéro. Et je ne sais pas comment faire pour
personnaliser le rendu d'un champ.
Une piste ?
Merci,
Thomas
Hors ligne
je crois que le plus simple serait d'utiliser un SmallIntegerField en
definissant les paires de tuples valeur, nom.
Ensuite tu fais appel à la methode get_FOO_display() pour afficher le
nom. Si le champ se nomme mois da
Le 6 juin 2009 14:29, Thomas Petazzoni<thomas.petazzoni _AT_ enix.org> a écrit :
> Bonjour,
>
> Je souhaite créer un nouveau champ pour mes modèles, qui permette de
> stocker un numéro de mois, mais qui soit rendu comme une liste
> déroulante avec janvier, février, ..., décembre dans.
>
> Dans mon models.py, j'ai donc fait :
>
> class MonthField(models.IntegerField):
> def __init__(self, *args, **kwargs):
> locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
> kwargs['choices'] = [(s, calendar.month_name[s]) for s in range(1, 13)]
> super(MonthField, self).__init__(*args, **kwargs)
>
> Puis dans mon modèle :
>
> periodstart = MonthField(blank=True, null=True)
>
> Ça marche très bien, ça stocke bien la valeur dans la base et ça
> m'affiche effectivement une liste déroulante.
>
> Par contre, quand je fais {{ monobjet.periodstart }} dans un template,
> lors du rendu, ça m'affiche un numéro et pas le nom du mois
> correspondant à ce numéro. Et je ne sais pas comment faire pour
> personnaliser le rendu d'un champ.
>
> Une piste ?
>
> Merci,
>
> Thomas
> --
> Thomas Petazzoni http://thomas.enix.org
> Promouvoir et défendre le Logiciel Libre http://www.april.org
> Logiciels Libres à Toulouse http://www.toulibre.org
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
argh saleté de gmail. je disais, si le champ s'appelle "mois" dans ton
modele, django generera une methode get_mois_display() qui donnera le
nom du mois.
Le 6 juin 2009 14:45, Jérémie Ducastel<jeremie _AT_ ducastel.name> a écrit :
> je crois que le plus simple serait d'utiliser un SmallIntegerField en
> definissant les paires de tuples valeur, nom.
>
> Ensuite tu fais appel à la methode get_FOO_display() pour afficher le
> nom. Si le champ se nomme mois da
>
> Le 6 juin 2009 14:29, Thomas Petazzoni<thomas.petazzoni _AT_ enix.org> a écrit :
>> Bonjour,
>>
>> Je souhaite créer un nouveau champ pour mes modèles, qui permette de
>> stocker un numéro de mois, mais qui soit rendu comme une liste
>> déroulante avec janvier, février, ..., décembre dans.
>>
>> Dans mon models.py, j'ai donc fait :
>>
>> class MonthField(models.IntegerField):
>> def __init__(self, *args, **kwargs):
>> locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
>> kwargs['choices'] = [(s, calendar.month_name[s]) for s in range(1, 13)]
>> super(MonthField, self).__init__(*args, **kwargs)
>>
>> Puis dans mon modèle :
>>
>> periodstart = MonthField(blank=True, null=True)
>>
>> Ça marche très bien, ça stocke bien la valeur dans la base et ça
>> m'affiche effectivement une liste déroulante.
>>
>> Par contre, quand je fais {{ monobjet.periodstart }} dans un template,
>> lors du rendu, ça m'affiche un numéro et pas le nom du mois
>> correspondant à ce numéro. Et je ne sais pas comment faire pour
>> personnaliser le rendu d'un champ.
>>
>> Une piste ?
>>
>> Merci,
>>
>> Thomas
>> --
>> Thomas Petazzoni http://thomas.enix.org
>> Promouvoir et défendre le Logiciel Libre http://www.april.org
>> Logiciels Libres à Toulouse http://www.toulibre.org
>>
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>>
>
Hors ligne
Le Sat, 6 Jun 2009 14:45:12 +0200,
Jérémie Ducastel <jeremie _AT_ ducastel.name> a écrit :
> je crois que le plus simple serait d'utiliser un SmallIntegerField en
> definissant les paires de tuples valeur, nom.
>
> Ensuite tu fais appel à la methode get_FOO_display() pour afficher le
> nom. Si le champ se nomme mois da
Sauf que ce champ, je l'utilise plusieurs fois dans mon modèle. Et
j'aimerais mieux ne pas avoir à définir plusieurs get_FOO_display().
Mon but était de factoriser tout ça dans un champ générique (ici
MonthField).
Merci,
Thomas
Hors ligne
Dans ce cas, il faut peut etre que tu crées une class Month avec une
fonction __unicode__ qui renverra le nom plutot que le le numero, et
dans ta class MonthField tu definis une methode to_python() qui
renvoie un Month...
Le 6 juin 2009 14:49, Thomas Petazzoni<thomas.petazzoni _AT_ enix.org> a écrit :
> Le Sat, 6 Jun 2009 14:45:12 +0200,
> Jérémie Ducastel <jeremie _AT_ ducastel.name> a écrit :
>
>> je crois que le plus simple serait d'utiliser un SmallIntegerField en
>> definissant les paires de tuples valeur, nom.
>>
>> Ensuite tu fais appel à la methode get_FOO_display() pour afficher le
>> nom. Si le champ se nomme mois da
>
> Sauf que ce champ, je l'utilise plusieurs fois dans mon modèle. Et
> j'aimerais mieux ne pas avoir à définir plusieurs get_FOO_display().
> Mon but était de factoriser tout ça dans un champ générique (ici
> MonthField).
>
> Merci,
>
> Thomas
> --
> Thomas Petazzoni http://thomas.enix.org
> Promouvoir et défendre le Logiciel Libre http://www.april.org
> Logiciels Libres à Toulouse http://www.toulibre.org
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne