Vous n'êtes pas identifié(e).
bonjour
actuellement j'ai defini
UNIT
('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
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
> ('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
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
> ('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
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