Vous n'êtes pas identifié(e).
bonjour
j'aimerai a l'aide de cette fonction recuperer les differentes temperatures correspondant au materiau (name) a la categorie (nature_unit ) et a la propriete (val_champ )
le filtrage ne semble pas marcher,
def view_temperat(request, id):
name = get_object_or_404(UniteProperty3, id=id)
nature_unit = get_object_or_404(UniteProperty3, id=id)
val_champ = get_object_or_404(UniteProperty3, id=id)
return render_to_response('view_temp1.html', {
'nature_unit': nature_unit,
'name': name,
'val_champ': val_champ,
'T_elements': Temp_exp1.objects.filter(Q(name=name) & Q(nature_unit=nature_unit) & Q(val_champ=val_champ))
})
dans le modele j'ai :
class Physic(models.Model):
nat = models.CharField(_('name'), max_length=50, choices = PROPRIETE)
def __unicode__(self):
return self.nat
class UniteProperty3(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=50, 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)
def __unicode__(self):
return '%s' % (self.name)
class Temp_exp1(models.Model):
name = models.ForeignKey(Material, verbose_name=_('name'))
nature_unit = models.ForeignKey(Property, verbose_name=_('nature_unit')) ...
val_champ = models.ForeignKey(Physic, verbose_name=_('val_champ') ) ....
val_T = models.IntegerField(blank=True, null=False)
val_min= models.FloatField(blank=True, null=False)
val_max= models.FloatField(blank=True, null=False)
unite = models.CharField(_('val_unit'), max_length=50)
def __unicode__(self):
return '%s' % (self.name)
merci d'une reponse , peut etre la demarche est pas bonne...
Hors ligne
je ne comprends pas bien :
name = get_object_or_404(UniteProperty3, id=id)
nature_unit = get_object_or_404(UniteProperty3, id=id)
val_champ = get_object_or_404(UniteProperty3, id=id)
là tu appelle 3 fois le meme objet ?
logiquement tu devrais juste faire :
unit = get_object_or_404(UniteProperty3, id=id)
et ensuite utiliser dans ton query : unit.name, unit.nature_unit, etc ...
Hors ligne
si je fait
unit = get_object_or_404(UniteProperty3, id=id)
return render_to_response('view_temp1.html', {
'unit.name': unit.name,
'unit.nature_unit': unit.nature_unit,
'unit.val_champ': unit.val_champ,
'T_elements': Temp_exp1.objects.filter(unit.name=unit.name)
ca marche pas
Hors ligne
j'ai voulu m'inspirer de cela qui marche tres bien pour filtrer les proprietes (val_champ) par categorie (nature_unit)
def view_post1(request, slug):
name = get_object_or_404(Material, slug=slug)
return render_to_response('view_detail.html', {
'name':name,
'elements': UniteProperty3.objects.filter(name=name)
})
pour flilter les temperatures par propriete, j'y arrive pas...
Hors ligne
si je fait
unit = get_object_or_404(UniteProperty3, id=id)
return render_to_response('view_temp1.html', {
'unit.name': unit.name,
'unit.nature_unit': unit.nature_unit,
'unit.val_champ': unit.val_champ,
'T_elements': Temp_exp1.objects.filter(unit.name=unit.name)ca marche pas
quand tu recupere ton objet à la première ligne, tu le nomme 'unit'
ensuite tu accede à ses attributs avec unit.nom_attribut et ces attributs sont injectés dans ton dict de réponse
tu n'as pas à les appeller de la même façon, tu les appelles comme tu veux, l'important c'est juste de réutiliser les memes nom de variables dans ton template :
'nom': unit.name,
'nature': unit.nature_unit,
'valeur': unit.val_champ,
Ensuite, en ce qui concerne ton query, le seul lien que je vois entre les modèles Temp_exp1 et UniteProperty3 c'est le champ "nature_unit"
Donc un query possible serait :
'T_elements': Temp_exp1.objects.filter(nature_unit=unit.nature_unit)
Mais je ne connais pas ton application
Je pense que tu devrais prendre le temps d'imprimer et de potasser la doc de django sur les Models et Query
Hors ligne
ce que j'ai pas compris est aussi la correspondance entre les champs crees dans l'admin et le page not found correspondant a l'id...apres avoir clique sur le lien dynamique de la propriete..??
Hors ligne
oui
je vais rediger le plus clair possible
Hors ligne
bonjour
voila le probleme que j'ai qcq soit la facon dont j'ecrit la fonction
j'ai pour le modele
class UniteProperty3(models.Model):
name = models.ForeignKey(Material, verbose_name=_('name'))
nature_unit = models.ForeignKey(Property, verbose_name=_('nature_unit')) # mecanique, thermique...
val_champ = models.CharField(_('val_champ'), max_length=150) # durete Vickers....
val1= models.FloatField(blank=True, null=False) # valeur numerique min
val2= models.FloatField(blank=True, null=False) # valeur numerique max
val_unit = models.CharField(_('val_unit'), max_length=50) # unite (GPa, Kg,....)
def __unicode__(self):
return '%s' % (self.name)
@permalink
def get_absolute_url(self):
return ('view_allmat_temp',[self.id])
class Temp_exp(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) ....
val_T = models.IntegerField(blank=True, null=False)
val_min= models.FloatField(blank=True, null=False)
val_max= models.FloatField(blank=True, null=False)
unite = models.CharField(_('val_unit'), max_length=50)
le module url
url( r'^allmat/temp/(?P<id>[^\.]+).html',
'dreamer.allmat.views.lit_prop_temp',
name='view_allmat_temp'),
la vue
def lit_prop_temp(request, id):
T_elements = get_object_or_404(Temp_exp, id=id)
return render_to_response('view_temp1.html', {'T_elements': T_elements}
les liens dynamiques
{% ifequal pp.val_champ 'durete vickers' %}
<td width="150" <TT><a href="{{pp.get_absolute_url}}"> {{ pp.val_champ}}</a </TT></td>
<td width="150" <TT>{{ pp.val1}} </TT></td>
<td width="150" <TT>{{ pp.val2}} </TT></td>
<td width="150" <TT>{{ pp.val_unit}} </TT></td>
{% else %}
{% ifequal pp.val_champ 'module elasticite' %}
<td width="150" <TT><a href="{{pp.get_absolute_url}}"> {{ pp.val_champ}}</a </TT></td>
<td width="150" <TT>{{ pp.val1}} </TT></td>
<td width="150" <TT>{{ pp.val2}} </TT></td>
<td width="150" <TT>{{ pp.val_unit}} </TT></td>
{% else %}
{% ifequal pp.val_champ 'resistivite' %}
<td width="150" <TT><a href="{{pp.get_absolute_url}}"> {{ pp.val_champ}}</a </TT></td>
etc....
les deux premiers liens renvoient les bonnes pages
http://127.0.0.1:8000/allmat/temp/1.html
http://127.0.0.1:8000/allmat/temp/2.html
et le troisieme lien renvoie
http://127.0.0.1:8000/allmat/temp/9.html
evidemment page not found...
le probleme vient il de get absolute url
bien sur la fonction ne prend en compte ni le nom du materiau ni le type de categorie (mecanique, electrique...)
Hors ligne