Vous n'êtes pas identifié(e).
bonjour
voila
pour soumetrre un formulaire et envoyer ma requete vers une fonction de filtrage j'utilise form pour recuperer dans la base une liste deroulante des proprietes
je recupere bien la liste deroulante le probleme vient du request.GET['lapropriete'] pour la fonction qui recupere les donneees de la requete
pour le model j'ai
class donnee(models.Model):
name = models.CharField(_('name'), max_length= 150)
class Property(models.Model):
name = models.CharField(_('name'), max_length=50)
class Physic2(models.Model):
name = models.ForeignKey(Property, verbose_name=_('name'), null=True, blank=True)
lapropriete = models.ForeignKey(donnee, verbose_name=_('lapropriete'), blank=True)
pour form j'ai
class Physic2Form(forms.ModelForm):
class Meta:
model = Physic2
et dans view j'ai
def get_materials_one(request, category_slug=None):
if category_slug is None:
lafamille= 'general'
propriete= Physic2Form()
return render_to_response('material/critere1.html',
{'unefamille': lafamille,
'propriete': propriete},
context_instance=RequestContext(request))
pour le template
<form id= "testjson" action="{% url chercher_filtre1 %}" method= "get" onsubmit = "">
<table width="10" HEIGHT=10 border="1" style="border: 0.5px;" cellspacing="0" cellpadding="0" >
<tr BGCOLOR="#FFFFB0">
<td width="100" style="text-align:center"><TT>Property</TT></td>
<td width="10" style="text-align:center"><TT>min val</TT></td>
<td width="10" style="text-align:center"><TT>max val</TT></td>
<td width="10" style="text-align:center"><TT>min T°C</TT></td>
<td width="10" style="text-align:center"><TT>max T°C</TT></td>
</tr>
<tr>
<td>
{{ propriete.lapropriete }}
</td>
.....
pour ma fonction
def search_filter1(request):
try:
val1 = []
val2 = []
var70= []
val_min1 = float(request.GET['Vmin1'])
val_max1 = float(request.GET['Vmax1'])
T_min1 = float(request.GET['Tmin1'])
T_max1 = float(request.GET['Tmax1'])
valT1 = request.GET['lapropriete'] # propriete 1
si je fais un print de valT1 j'obtiens 1 si je selectionne la premiere propriete 2 pour la deuxieme...
comment recuperer une des proprietes (par ex 'Vickers Hardness')
le probleme vient de request.GET['lapropriete']
Hors ligne
Bonjour,
Etant donné que les extraits de code sont incomplets, il va falloir extrapoler la réponse.
A priori, ces nombres correspondent aux ID de Physics2. Il te faudra donc récupérer les instances associées pour en prendre le nom.
Note: Le plus élégant serait de laisser le formulaire gérer le traitement de la requête et d'en récupérer les objects.
Hors ligne
oui les nombres correspondent aux id de Physic2
peux tu me dire comment faire ?
ou me mettre sur une piste car je vois vraiment pas
Hors ligne
dans le template si j'ecris
{% for choice in propriete.lapropriete %}
{{ choice }}
{% endfor %}
il faudrait que j'associe un id et un nom a choice pour passer la requete
c'est ca ?
Hors ligne
Si tu nous disais ce que tu souhaites faire plutôt que comment tu voudrais le faire, les réponses seraient plus ciblées.
Récuperer une instance à partir d'un ID, c'est simple: instance = Property.objects.get(id=request.GET['Vmin1']) par exemple.
Utiliser le formulaire pour récuperer les instances, c'est mieux.
En revanche, je ne peux guère te guider efficacement, d'une part à cause de la remarque au dessus, d'autre part, parce que tes fragments de code ne sont pas cohérents (1 FK entre Physics2 et Property dans ton forumlaire alors que tu en récupères 4 dans la vue de traiement)..
Hors ligne
c'st simple
je veux recuperer en liste deroulante les proprietes enregistrees dans la base
afin de me servir du formulaire et envoyer une requete vers une fonction de filtrage qui va me trouver tous les materiaux correspondant a la propriete xx variant entre vmin1 et vmax1 dant la plage de temperature Tmin1 Tmax1
j'ai trouvé la solution pour une requete sur une propriete
lorsque je clique sur le bouton submit j'envoie les donnees vers cette fonction qui cette fois me renvoie bien la propriete
def search_filter1(request):
try:
val_min1 = float(request.GET['Vmin1'])
val_max1 = float(request.GET['Vmax1'])
T_min1 = float(request.GET['Tmin1'])
T_max1 = float(request.GET['Tmax1'])
if request.method == 'GET':
form = Physic2Form(request.GET)
if form.is_valid():
valT1 = form.cleaned_data['lapropriete']
maintenant si je voulais faire une requete sur deux proprietes comment faire pour dissocier les deux ??
valmin1, valmax1, Tmin1, Tmax1 ne proviennent pas de la base
ce sont simplement des champ input du formulaire servant a la requete
Dernière modification par sesame (19-06-2013 10:31:29)
Hors ligne
y aurait bien sur la solution de creer dans la modele autant de classes que de criteres de filtrages souhaites
avec
'lapropriete'
'lapropriete2'
'lapropriete3'
etc
Hors ligne
Bonjour,
Si tu as un nombre prédéfini de formulaires identiques, tu peux t'en sortir en jouant sur les prefix des formulaires afin qu'ils aient chacun une sorte d'espace de nommage (voir https://docs.djangoproject.com/en/dev/r … for-forms)
La solution plus complexe mais à mon avi plus propre est d'utiliser les formsets (voir https://docs.djangoproject.com/en/dev/t … formsets/)
Hors ligne