9
votes

Django filtre iContains correspondent uniquement aux mots entier

J'utilise le filtre IConTains pour rechercher des mots mais je veux seulement qu'il correspond à des mots entiers. par exemple. Si je cherchais du foie, je ne voudrais pas que cela retourne la livraison.

Ma requête ressemble à ceci xxx

J'ai vu le filtre __ recherche Mais cela ne ramène pas les résultats avec 3 caractères ou moins et le site que je suis en construction contient beaucoup de ceux-ci qui pourraient être recherchés, par exemple "BBC"

Je n'ai pas accès à la base de données, mais si quelqu'un sait comment je peux le désactiver dans le code, je serais heureux de passer à l'utilisation d'une alternative.


2 commentaires

Peut-être que vous pourriez utiliser Regex à la place ou ajoutez des espaces à Démarrage et fin de votre Search_word String?


Je pensais à ajouter des espaces mais si le titre n'avait que 1 mot ou le mot est apparu au début ou à la fin du titre, cela ne fonctionnerait pas. Comment puis-je le faire via Regex?


3 Réponses :


-4
votes

On dirait que vous voulez une correspondance exacte insensible au cas.

MyModel.objects.filter(title__iexact=search_word)


2 commentaires

Cela ne fonctionnerait pas car je souhaite toujours rechercher une partie d'une chaîne, mais Iexact exige que toute la chaîne correspondenne. Par exemple, si mon titre était "Ceci est un titre de test", je voudrais le constater si je cherchais "Titre du test"


Je vois. Vous voulez qu'il trouve 'Test Titre' mais pas "Titre de l'Est". J'ai compris.



6
votes

Regexp est généralement suffisant: http://docs.djangoproject.com/fr/dev/ref/ Modèles / QuerySetSets / # Regex

Veuillez noter que la syntaxe d'expression régulière est celle du backend de base de données utilisé .

in python (sqlite) le regexp serait: xxx

dans mysql, vous avez: xxx


1 commentaires

0
votes

Si vous auriez et service de repos implémenté avec ou DRF, vous pouvez filtrer par tout Mots comme $ http.get (uri, {'parames': {'Nomel__iregex': '[[[: <:]] Word [[[:>:]]'})

Bien sûr, Display_Name doit être activé pour filtrer dans la méta méta de la ressource TASTYPIE en tant que filtrage = {'display_name': tout,}


0 commentaires