Vous n'êtes pas identifié(e).
Bonjour
Je cherche a faire une recherche par filtrage sur un champ numerique
Exemple
class Material(models.Model):
name = models.CharField(_('name'), max_length=50)
class propriete(models.Model):
name = models.ForeignKey(Material, verbose_name=_('name'))
val_champ = models.CharField(_('val_champ'), max_length=50)
val= models.FloatField(blank=True, null=False)
je voudrais trouver tous les materiaux dont la valeur du champ "val" est compris
dans l'intervalle [val1, val2]
comment s'y prendre ?
mat = propriete.objects.filter(…..) ?
Hors ligne
2011/8/30 sesame <pat.100 _AT_ hotmail.fr>
> Bonjour
>
Bonjour sesame,
> Je cherche a faire une recherche par filtrage sur un champ numerique
>
> Exemple
>
> class propriete(models.Model):
> name = models.ForeignKey(Material, verbose_name=_('name'))
> val_champ = models.CharField(_('val_champ'), max_length=50)
> val= models.FloatField(blank=True, null=False)
>
>
> je voudrais trouver tous les materiaux dont la valeur du champ "val" est
> compris
> dans l'intervalle [val1, val2]
>
> comment s'y prendre ?
>
> mat = propriete.objects.filter(…..) ?
tu es à la recherche des arguments "magiques" de la method filter [1]
cela fonctionne de la façon suivante:
{{ nom_de_l_attribute }}__{{ methode_de_filtrage}}
en paramètre il faut passer la valeur sur laquelle le filtrage a lieu
dans ton cas cela donnerai:
>>> mat = propriete.objects.filter(val__gt=val1, val__ls=val2)
et voilà
[1]
https://docs.djangoproject.com/en/dev/ref/models/querysets/#field-lookups
Hors ligne
mais que devient le q = request.GET['q'] renvoyé par le submit...
on pars d'un formulaire avec un boutton submit qui envoie la valeur , on teste un encadrement de cette valeur
Hors ligne
Ben il te faut deux valeurs dans ton formulaire avec le min et le max.
Sinon, il faut que tu définisses val1 et val2 en fonction de q avec val1 = q-10 et val2=q+10
Hors ligne
merci, je vais tester
Hors ligne
ca marche..encore merci
mais, pourrait on utiliser le propriete.objects.filter() sur les deux champs val et val_champ ?
Hors ligne
visiblement le double filtrage ne marche pas
voici ma fonction
def search_filter(request):
errors = []
try:
if 'q' in request.GET:
q = int(request.GET['q'])
val1 = request.GET['fil']
except ValueError, error:
return render_to_response('materiaux/message.html',
locals(),
context_instance=RequestContext(request))
else:
print(q)
print(val1)
mat = UniteProperty.objects.filter(val_champ__icontains =val1)
mat = UniteProperty.objects.filter(val__gte=q-1, val__lte=q+1 )
return render_to_response('materiaux/search_results_filt.html',
{'mat' : mat,
'query': val1,
'query': q,
})
Hors ligne
C'est normal, tu assignes une nouvelle valeur à mat en faisant mat =
Pourquoi ne pas tout mettre dans la même requête?
UniteProperty.objects.filter(val_champ__icontains=val1, val__gte=q-1, val__lte=q+1)
Le 31/08/2011 11:05, sesame a écrit :
> visiblement le double filtrage ne marche pas
>
> voici ma fonction
>
> def search_filter(request):
> errors = []
> try:
> if 'q' in request.GET:
> q = int(request.GET['q'])
> val1 = request.GET['fil']
> except ValueError, error:
> return render_to_response('materiaux/message.html',
> locals(),
>
> context_instance=RequestContext(request))
>
> else:
> print(q)
> print(val1)
> mat = UniteProperty.objects.filter(val_champ__icontains =val1)
> mat = UniteProperty.objects.filter(val__gte=q-1, val__lte=q+1 )
>
> return render_to_response('materiaux/search_results_filt.html',
> {'mat' : mat,
> 'query': val1,
> 'query': q,
> })
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne