Django-fr

Forum

#1 21-11-2011 10:48:38

sesame
Membre
Inscription : 22-03-2011
Messages : 263

listes

bonjour

actuellement j'ai defini

UNIT sad
    ('GPa', 'GPa'),
    ('MPa', 'MPa'),
    ('J.kg-1.K-1', 'J.kg-1.K-1'),
    ('W.m-1.K-1', 'W.m-1.K-1'),
     )


class Property(models.Model):
    name = models.CharField(_('name'), max_length=50)
    description = models.TextField(_('description'), blank=True)


les objets de la classe Property sont : 'mecanique', 'thermique'   


class UniteProperty2(models.Model):
    name = models.ForeignKey(Material, verbose_name=_('name'))                                   ....
    nature_unit = models.ForeignKey(Property, verbose_name=_('nature_unit'))                     ..
    val_champ = models.CharField(_('val_champ'), max_length=150, choices = PROPRIETE)            ....
    val1= models.FloatField(blank=True, null=False)                                               
    val2= models.FloatField(blank=True, null=False)                                               
    val_unit = models.CharField(_('val_unit'), max_length=50, choices = UNIT)   


je voudrai que si nature_unit= mecanique

val_unit = UNIT1


avec

UNIT1 = (
    ('GPa', 'GPa'),
    ('MPa', 'MPa'),
    )

et si nature_unit= 'thermique'

val_unit = UNIT2

avec

UNIT2 = (
    ('J.kg-1.K-1', 'J.kg-1.K-1'),
    ('W.m-1.K-1', 'W.m-1.K-1'),
     )

y a t'il une solution simple ?

merci d'un avis

Hors ligne

#2 21-11-2011 12:28:41

SBillion
Membre
Lieu : grenoble
Inscription : 05-08-2011
Messages : 43
Site Web

Re : listes

Bonjour,

Comme je te l'ai déjà expliqué auparavant, lorsque tu fais une
ForeignKey vers un Modèle, comme c'est le cas de ton champ nature_unit,
tu ne peux pas dire qu'il est égale à une string donc:
nature_unit == 'thermique' n'a encore une fois aucun sens. nature_unit
ne peut qu'être égale à un objet de type Property
Donc soit tu teste ton nature_unit avec un objet Property, soit tu
revois ton modèle.

Dans tout les cas, tu dois faire tes conditions et modifications avant
que l'objet que tu crées soit sauvegarder. La méthode la plus simple est
de redéfinir la méthode save() de ton modèle
def save(self, *args, **kwargs):
     """Redéfinition de la méthode save()"""

     super(Page, self).save(*args, **kwargs)

Le 21/11/2011 10:48, sesame a écrit :
> bonjour
>
> actuellement j'ai defini
>
> UNIT sad
>      ('GPa', 'GPa'),
>      ('MPa', 'MPa'),
>      ('J.kg-1.K-1', 'J.kg-1.K-1'),
>      ('W.m-1.K-1', 'W.m-1.K-1'),
>       )
>
>
> class Property(models.Model):
>      name = models.CharField(_('name'), max_length=50)
>      description = models.TextField(_('description'), blank=True)
>
>
> les objets de la classe Property sont : 'mecanique', 'thermique'
>
>
> class UniteProperty2(models.Model):
>      name = models.ForeignKey(Material, verbose_name=_('name'))
>                        ....
>      nature_unit = models.ForeignKey(Property,
> verbose_name=_('nature_unit'))                     ..
>      val_champ = models.CharField(_('val_champ'), max_length=150, choices =
> PROPRIETE)            ....
>      val1= models.FloatField(blank=True, null=False)
>
>      val2= models.FloatField(blank=True, null=False)
>
>      val_unit = models.CharField(_('val_unit'), max_length=50, choices =
> UNIT)
>
>
> je voudrai que si nature_unit= mecanique
>
> val_unit = UNIT1
>
>
> avec
>
> UNIT1 = (
>      ('GPa', 'GPa'),
>      ('MPa', 'MPa'),
>      )
>
> et si nature_unit= 'thermique'
>
> val_unit = UNIT2
>
> avec
>
> UNIT2 = (
>      ('J.kg-1.K-1', 'J.kg-1.K-1'),
>      ('W.m-1.K-1', 'W.m-1.K-1'),
>       )
>
> y a t'il une solution simple ?
>
> merci d'un avis
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#3 21-11-2011 13:49:26

Laurent VERGEROLLE
Membre
Inscription : 14-11-2011
Messages : 5

Re : listes

Salut Sesame,

Pour ton problème je pense que tu pourras le gérer dans un forms.py en
utilisant de l'AJAX (Perso j'ai pas de truc simple en tête à te donner en 2
minutes. Me suis jamais poser la question). En tout cas si tu souhaites
éviter, pour commencer, les erreurs de saisie tu peux t'orienter vers une
méthode clean qui fera (sans le côté Ajax) la bonne validation. exemple :

forms.py

UNIT1 = ('GPa','MPa',)
UNIT2 = (J.kg-1.K-1',W.m-1.K-1')

class UniteProperty2Form(forms.ModelForm):
    class Meta:
        model = UniteProperty2

    def clean_val_unit(self):
        val_unit = self.cleaned_data['val_unit']
        nature_unit = self.cleaned_data['nature_unit']

        if not(self.nature_unit.name == 'mecanique' and self.val_unit in
UNIT1) or
            not(self.nature_unit.name == 'thermique' and self.val_unit in
UNIT2):
                raise forms.ValidationError(u'Cette valeur d\'unité ne pas
être affecté a cette nature')
        return val_unit

J'espère que ça pourra déjà t'aider. Après cherche comment écrire tes
propres widgets pour placer ton AJAX dedans et masquer des champs en
fonction de ton nature_unit.

Librement,
Laurent Vergerolle AKA flyaway, AKA psychoz971
http://www.gwadalug.org/

Le 21 novembre 2011 07:28, seb <sebastien.billion _AT_ gmail.com> a écrit :

>  Bonjour,
>
> Comme je te l'ai déjà expliqué auparavant, lorsque tu fais une ForeignKey
> vers un Modèle, comme c'est le cas de ton champ nature_unit, tu ne peux pas
> dire qu'il est égale à une string donc:
> nature_unit == 'thermique' n'a encore une fois aucun sens. nature_unit ne
> peut qu'être égale à un objet de type Property
> Donc soit tu teste ton nature_unit avec un objet Property, soit tu revois
> ton modèle.
>
> Dans tout les cas, tu dois faire tes conditions et modifications avant que
> l'objet que tu crées soit sauvegarder. La méthode la plus simple est de
> redéfinir la méthode save() de ton modèle
> def save(self, *args, **kwargs):
>     """Redéfinition de la méthode save()"""
>
>     super(Page, self).save(*args, **kwargs)
>
> Le 21/11/2011 10:48, sesame a écrit :
>
> bonjour
>
> actuellement j'ai defini
>
> UNIT sad
>     ('GPa', 'GPa'),
>     ('MPa', 'MPa'),
>     ('J.kg-1.K-1', 'J.kg-1.K-1'),
>     ('W.m-1.K-1', 'W.m-1.K-1'),
>      )
>
>
> class Property(models.Model):
>     name = models.CharField(_('name'), max_length=50)
>     description = models.TextField(_('description'), blank=True)
>
>
> les objets de la classe Property sont : 'mecanique', 'thermique'
>
>
> class UniteProperty2(models.Model):
>     name = models.ForeignKey(Material, verbose_name=_('name'))
>                       ....
>     nature_unit = models.ForeignKey(Property,
> verbose_name=_('nature_unit'))                     ..
>     val_champ = models.CharField(_('val_champ'), max_length=150, choices =
> PROPRIETE)            ....
>     val1= models.FloatField(blank=True, null=False)
>
>     val2= models.FloatField(blank=True, null=False)
>
>     val_unit = models.CharField(_('val_unit'), max_length=50, choices =
> UNIT)
>
>
> je voudrai que si nature_unit= mecanique
>
> val_unit = UNIT1
>
>
> avec
>
> UNIT1 = (
>     ('GPa', 'GPa'),
>     ('MPa', 'MPa'),
>     )
>
> et si nature_unit= 'thermique'
>
> val_unit = UNIT2
>
> avec
>
> UNIT2 = (
>     ('J.kg-1.K-1', 'J.kg-1.K-1'),
>     ('W.m-1.K-1', 'W.m-1.K-1'),
>      )
>
> y a t'il une solution simple ?
>
> merci d'un avis
> _______________________________________________
> django mailing listdjango _AT_ lists.afpy.orghttp://lists.afpy.org/mailman/listinfo/django
>
>
> --
> BILLION Sébastien
>
> 42 is the ultimate answer to the ultimate question of life, The universe,
> and everything
>
>  http://www.sebastienbillion.com
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#4 21-11-2011 15:41:47

sesame
Membre
Inscription : 22-03-2011
Messages : 263

Re : listes

j'ai cree dans l'admin les categories mecanique et thermique dependantes de Property

je voulais que dans cette interface d'ad'ministration n'apparraisse pour les unites (val_unit) , une liste deroulante specifique a la categorie mecanique (nature_unit)  et une liste deroulante specifique a la categorie thermique

Hors ligne

Pied de page des forums