Vous n'êtes pas identifié(e).
bonjour
lorsque je veux faire une recherche de materiaux dont la valeur min est val_min1, la valeur max est val_max1
je fais
units1 = UniteProperty2.objects.filter(Q(val_champ__icontains = valT1) & Q(val1__gte=val_min1-2, val1__lte=val_min1+2))
units2 = UniteProperty2.objects.filter(Q(val_champ__icontains = valT1) & Q(val2__gte=val_max1-2, val2__lte=val_max1+2))
units10 = units1 & units2
val1 et val2 etant les valeurs ecrites dans la base suivant le modele
valT1 etant le nom de la propriete
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 = PHYSICS_CHOICES) .
val1= models.FloatField(blank=True, null=False)
val2= models.FloatField(blank=True, null=False)
mais comment faire pour rechercher tous les materiaux compris entre val_min1 et val_max1 ?
une boucle entre val_min1 et val_max1 ?
il faudrait que val1 et val2 changent a chaque passage de boucle...
je ne comprend pas..
Hors ligne
Bonjour,
Ta question est spécifique au métier de ton application et pas évidente à
comprendre.
Je ne comprend pas la relation entre l'unité, la "valeur" des materiaux.
tes noms de variables n'ont pas de sens à mes yeux (les suffixe 1 et 2 en
fin de noms de variable et de classes sont une plaie à la lisibilité du
code. Même si c'est un example.)
pourquoi des -2 et des +2?
pourquoi le lien vers material est dans un champ "name"?
Je ne comprend pas la question.
2012/5/12 sesame <pat.100 _AT_ hotmail.fr>
> bonjour
>
> lorsque je veux faire une recherche de materiaux dont la valeur min est
> val_min1, la valeur max est val_max1
> je fais
>
> units1 = UniteProperty2.objects.filter(Q(val_champ__icontains = valT1) &
> Q(val1__gte=val_min1-2, val1__lte=val_min1+2))
> units2 = UniteProperty2.objects.filter(Q(val_champ__icontains = valT1) &
> Q(val2__gte=val_max1-2, val2__lte=val_max1+2))
>
> units10 = units1 & units2
>
> val1 et val2 etant les valeurs ecrites dans la base suivant le modele
> valT1 etant le nom de la propriete
>
> 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 =
> PHYSICS_CHOICES) .
> val1= models.FloatField(blank=True, null=False)
>
> val2= models.FloatField(blank=True, null=False)
>
> mais comment faire pour rechercher tous les materiaux compris entre
> val_min1 et val_max1 ?
>
> une boucle entre val_min1 et val_max1 ?
> il faudrait que val1 et val2 changent a chaque passage de boucle...
>
> je ne comprend pas..
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
bien,
pour un materiau donné (name=models.ForeignKey), de propriete nature_unit (mecanique, ou physique etc) j'ai toutes ses caracterisques enregistrees (essais experimentaux)
par exemple pour la propriete durete vickers (val_champ) j'ai par exemple val1 (valeur min) = 35 val2= 53 (valeur max) (unite GPa)
je fais donc un filtrage min et max sur les intervalles [-2 +2] encadrant valmin1, valmax1 (-2 et +2 choisis arbitrairement)
si valmin encadre la valeur enregistree (val1) dans l'intrevalle -2,+2 le materiau (par exemple Al2O3) est retenu((name = models.ForeignKey(Material, verbose_name=_('name'))
maintenant si je veux connaitre tous les materiaux pouvant etre retenus dans la plage valmin1, valmax1, le probleme est different
Hors ligne
Le modèle qu'on a c'est UniteProperty2 pas Material.
Sans trop comprendre ce que tu m'explique, je pense que soit tu n'as pas de
calcul à faire dans la requete et tu peux chainer plus de Q objects soit il
te faut un F object.
https://docs.djangoproject.com/en/dev/topics/db/queries/#query-expressions
Et je maintiens, les numéreaux en fin de variable c'est ma vu,
(
http://www.developpez.com/actu/43571/Quels-sont-les-pires-noms-de-variables-que-vous-avez-deja-vus-Un-developpeur-identifie-les-deux-plus-mauvais-noms-couramment-utilises/)
même si dans ton cas métier value est le terme à utiliser il est souvent
utilisé à tord comme data dans le lien précédent.
Cordialement et toujours sans avoir compris la question. Malgré un Bac S SI
en poche.
2012/5/14 sesame <pat.100 _AT_ hotmail.fr>
> bien,
> pour un materiau donné (name=models.ForeignKey), de propriete nature_unit
> (mecanique, ou physique etc) j'ai toutes ses caracterisques enregistrees
> (essais experimentaux)
> par exemple pour la propriete durete vickers (val_champ) j'ai par exemple
> val1 (valeur min) = 35 val2= 53 (valeur max) (unite GPa)
> je fais donc un filtrage min et max sur les intervalles [-2 +2] encadrant
> valmin1, valmax1 (-2 et +2 choisis arbitrairement)
>
> si valmin encadre la valeur enregistree (val1) dans l'intrevalle -2,+2 le
> materiau (par exemple Al2O3) est retenu((name = models.ForeignKey(Material,
> verbose_name=_('name'))
>
> maintenant si je veux connaitre tous les materiaux pouvant etre retenus
> dans la plage valmin1, valmax1, le probleme est different
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
voila le test auquel je pense
X1 = arange(val_min1,val_max1, 0.1)
for inc in range(0,len(X1))[::-1]:
units_max = Essai_Temperature.objects.filter(Q(val_champ__icontains = valT1) & Q(val20__gte= X1[inc]))
for inc in range(0,len(X1),1):
units_min = Essai_Temperature.objects.filter(Q(val_champ__icontains = valT1) & Q(val10__lte= X1[inc]))
Hors ligne
Qu'est-ce que tu veux récupérer en fait ?
Pourquoi tu ne fais pas directement :
units =
Essai_Temperature.objects.filter(Q(val_champ__icontains = valT1)&
Q(val20__gte= val_min1)&
Q(val20__lte= val_max1)
)
Le 14/05/2012 11:46, sesame a écrit :
> voila le test auquel je pense
>
> X1 = arange(val_min1,val_max1, 0.1)
>
> for inc in range(0,len(X1))[::-1]:
> units_max =
> Essai_Temperature.objects.filter(Q(val_champ__icontains = valT1)&
> Q(val20__gte= X1[inc]))
>
> for inc in range(0,len(X1),1):
> units_min =
> Essai_Temperature.objects.filter(Q(val_champ__icontains = valT1)&
> Q(val10__lte= X1[inc]))
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne
je veux recuperer le nom de tous les materiaux dans l'intervalle [val_min1, val_max1]
et non ceux situes aux bornes de l'intervalle
Hors ligne
L'intervalle c'est :
val_min1 <= X <= val_max1
Soit
X >= val_min1
X <= val_max1
gte signifie : >=
lte signifie : <=
Donc la requête :
units =
Essai_Temperature.objects.filter(val_champ__icontains = valT1).filter(val20__gte= val_min1).filter(val20_lte=val_max1)
CQFD
Rémy
Le 14/05/2012 12:45, sesame a écrit :
> je veux recuperer le nom de tous les materiaux dans l'intervalle [val_min1,
> val_max1]
>
> et non ceux situes aux bornes de l'intervalle
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne
val10 et val20 sont les donnees enregistrees (valeurs min et max)
il manquerait un test avec val10 ?
units1 =
Essai_Temperature.objects.filter(Q(val_champ__icontains = valT1) &
Q(val20__gte= val_min1)&
Q(val20__lte= val_max1)
)
units2 =
Essai_Temperature.objects.filter(Q(val_champ__icontains = valT1) &
Q(val10__gte= val_min1) &
Q(val10__lte= val_max1)
)
unit_1_2 = units1 & units2
Hors ligne