IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Transformer une chaine de caractère


Sujet :

Django Python

  1. #1
    Invité
    Invité(e)
    Par défaut Transformer une chaine de caractère
    Je suis en train de travailler sur le developpement d'une recherche multi-critère.
    Pour l'instant j'utilise 3 critères mais à l'avenir d'autres critères vont être inséré.
    Le problème est que je dois aussi géré les valeurs null car on est pas obligé d'utiliser tous les critères proposés.
    L'algorithme devient donc très vite laborieux en fonction du nom de critères dans le formulaire de recherche.
    J'ai donc trouvé une parade (je suis sure que c'est pas une bonne méthode )
    en utilisant la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    def resultat(request):
        id_commune = request.POST['commune']
        id_activite = request.POST['activite']
        id_specificite = request.POST['specificite']
        if id_commune:
            id_com = ".filter(commune=" + id_commune + ")"
        if id_activite:
            id_act = ".filter(activite=" + id_activite + ")"
        if id_specificite:
            id_spe = ".filter(specificite=" + id_specificite + ")"
        requete = "Site.objects" + id_com + id_act + id_spe
        return requete
    La variable requete est une suite de chaine de caractères hors moi ce que je souhaite c'est que Django puisse reconnaitre cette chaine comme étant une API d'abstraction.
    Y'a t'il une fonction qui me permettrai de résoudre mon problème ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Après avoir chercher pendant plusieurs heures, je suis tombé sur la fonction eval() qui a résolu mon problème.

  3. #3
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Bonjour,

    l'utilisation de eval n'est géneralement pas une bonne idée, dans ce cas non plus

    Le framework django permet l'utilisation de formulaire pour filtrer et valider les données envoyées par l'utilisateur et permet de transtyper celles-ci dans l'objet python le plus adequate via la methode clean_data, je te conseille fortement de les utiliser.

    Après avoir passé tes variables POST au formulaire, tu verifies que le formulaire est valide et ensuite tu peux enchainer les filter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if form.is_valid():
        sites = sites.objects.all()
        for name in ['commune', 'activite', 'specificite']:
            if form.clean_data[name]:
                sites = sites.filter(**{name: form.clean_data[name]})
        return sites
    Je t'encourage à lire la documentation, malheureusement en anglais

    Concernant le sens de la requête, si tu veux pouvoir faire des opérations logiques (OR) utilise l'objet Q, le chainage des filter s'opérant avec un AND

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je te remercie de ta réponse Pacificator
    Comme je l'ai dit plus haut, c'est une méthode très sale que j'ai utilisé
    J'utilisais déjà un formulaire à la base donc je me suis orienter logiquement sur les clean_data comme tu le précise après la saisie de cette discussion. Je vois pas pourquoi j'ai cherché à faire compliquer franchement.
    En tout cas merci pour tes précisions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer une chaine de caractères
    Par lcoulon dans le forum Débuter
    Réponses: 9
    Dernier message: 14/02/2011, 11h14
  2. Réponses: 11
    Dernier message: 04/11/2007, 21h32
  3. Réponses: 3
    Dernier message: 12/06/2006, 11h18
  4. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  5. Réponses: 2
    Dernier message: 14/01/2005, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo