Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comparaison list

Avec Django

Sujet résolu
    3 septembre 2010 à 10:43:53

    Bonjour a tous, j'aimerai comparé une liste a une liste de donné que je récupère de ma bdd. Tous a l'air de bien fonctionner jusqu'au moment de la comparaison de celle-ci que je fais avec un if in .

    En gros si un des mots qui ce trouve dans ma liste principal ce retrouve dans des enregistrement de ma table, j'aimerai mettre tout les enregistrement concerné dans un tableau pour pouvoir les récupéré.

    def page_recherche(request):
        #Ma liste principal
        keywords = ('Fraises', )
    
        items = Item.objects.with_keywords(keywords)
        
    
        return render_to_response('imagin/page-recherche.html',
        {'title': 'Recherche images',
         'attribu_image': items,
             }, 
            context_instance=RequestContext(request)
        )
    


    class ItemManager(models.Manager):
        def with_keywords(self, keywords):
            items = Item.objects.all()
            match_items = []
            for item in items:  
                for thesaurus_element in item.thesaurus.all(): # jusqu'ici sa fonctionne
                    if thesaurus_element in keywords:
                        match_items.append(item)
                     
            return match_items
    



    Merci d'avance de m'aider pour mon problème de logique et je suis ouvert a utiliser une autre méthode si jamais vous estimer que j'en ai fais beaucoup pour pas grand chose... ;)
    • Partager sur Facebook
    • Partager sur Twitter
      3 septembre 2010 à 11:20:15

      Bonjour,

      qu'est ce qui bloque? Que te dis ton débugger ?

      keywords = ('Fraises', )
      

      Essayes sans 'virgule' (mais la je n'en suis pas sur)
      • Partager sur Facebook
      • Partager sur Twitter
        3 septembre 2010 à 11:24:57

        Ben le débugger ne me dit rien sa m'affiche juste une liste vide: []

        Il aime pas trop que je lui enlève la virgule il me met :'in <string>' requires string as left operand, not Thesaurus
        • Partager sur Facebook
        • Partager sur Twitter
          3 septembre 2010 à 13:55:51

          Pour le tuple à un élément il faut garder la virgule, sinon les parenthèses sont pas interprétées comme délimiteurs de tuple.

          Après j'ai pas repéré de problème de logique dans le code, mais c'est pas évident comme ça à vue... A la limite faudrait tester le code dans une session interactive pour voir à quel moment ça coince exactement.
          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

            3 septembre 2010 à 14:14:28

            J'ai décider de procéder autrement :

            Item.objects.filter(thesaurus__name__in = list(keywords))
            


            Mais je reçois ceci en affichage : <class 'libertyproject.liberty.models.Item'>


            Je suis novice en python, utilisation d'une framework et de la POO donc ce genre de résultat est assez abstrait pour moi.


            Je pensais récupère mon ou mes enregistrements de ma table item et pouvoir l'exploiter dans ce genre la :



            item.name
            
            item.description
            
            ...
            




            Edit: Sa fonctionne j'avais mal itéré ma liste...


            Merci a vous pour votre aide. ;)
            • Partager sur Facebook
            • Partager sur Twitter

            Comparaison list

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown