Je développais avec Django l'autre jour et j'avais besoin d'une fonction de recherche. Cependant, j'ai toujours demandé: "Eh bien, comment affiner l'écriture?", Alors je l'ai résumé. Je vous serais reconnaissant si vous pouviez signaler des notes supplémentaires ou des erreurs.
Le modèle Django a un attribut appelé object, qui contient une instance de la classe Manager
.
Filter
est une fonction fournie dans cette classe Manager
, ce qui est utile lorsque vous voulez ** filtrer (affiner) les données que vous voulez littéralement.
Je l'ai appelé une recherche stricte, mais je vais introduire une recherche qui restreint la recherche qui correspond exactement au contenu que vous souhaitez filtrer.
Cette recherche recherche les ** correspondances exactes **, sensibles à la casse.
Exemple
user_name = "hoge" //Définissez le nom d'utilisateur que vous souhaitez rechercher en tant que variable.
data = User.objects.filter(name=user_name)
Obtient le champ de nom dans le modèle User qui correspond au nom_utilisateur défini ci-dessus. Cela vous permettra de vous limiter à ceux qui correspondent exactement au nom hoge.
Ensuite, regardons la recherche lâche. C'est souvent le cas quand vous dites: "Je ne sais pas si hoge est celui qui correspond exactement au nom, mais si vous êtes une personne avec un nom comme hogefugafoo, un programmeur insensé."
Dans un tel cas, si vous voulez rechercher non seulement celui qui correspond exactement à "hoge" mais aussi ** qui inclut ** "hoge" **, cette recherche lâche est utilisée.
Nom du champ __contains = valeur
Nom du champ __startswith = valeur
Nom du champ __endswith = valeur
est.
Voyons comment l'utiliser concrètement.
user_name = "fuga"
data = User.objects.filter(name__contains=user_name)
Maintenant, vous pouvez également obtenir "hogefugafoo". La même chose s'applique aux autres recherches.
user_name = "fuga"
data = User.objects.filter(name__startswith=user_name)
Dans ce cas, comme il commence par "fuga", "hogefugafoo" ne correspond pas, mais "fuga Taro" le fait.
user_name = "fuga"
data = User.objects.filter(name__endswith=user_name)
Dans ce cas, "hogefugafoo" ne correspond pas, mais "Yamada johnfuga" le fait.
Maintenant, à ce stade, vous voudrez peut-être faire une recherche plus lâche qui ne fait pas la distinction entre les majuscules et les minuscules. Dans un tel cas, ajoutez simplement ** ʻi` **.
Nom du champ __iexact = valeur
Nom du champ __icontains = valeur
-Recherche commençant par ** **
Nom du champ __istartswith = valeur
-Recherche se terminant par ** **
Nom du champ __iendswith = valeur
Merci d'avoir lu jusqu'au bout. J'écrirai plus tard sur la recherche numérique et la recherche ET OU la recherche avec plusieurs conditions, alors merci pour votre coopération.
Recommended Posts