2012-01-12 2 views
0

J'ai eu un comportement étrange en utilisant icontains sur mon serveur de développement. J'ai une requête complexe qui a retourné des résultats étranges (pas le nombre attendu). J'ai creusé pour trouver le problème semble être avec icontains.Django étrange comportement icontains en développement

Tout d'abord, voici la sortie de MySQL d'une partie de la requête que je veux courir dans Django:

mysql> select * from species where en_name RLIKE 'tortoise'; 
+-------+----------------------------------+ 
| id | en_name       | 
+-------+----------------------------------+ 
| 16215 | Santa Cruz Galapagos Tortoise | 
| 16214 | Floreana Galapagos Tortoise  | 
| 16213 | Volcan Darwin Galapagos Tortoise | 
| 16211 | Sierra Negra Galapagos Tortoise | 
| 16210 | Pinzon Galapagos Tortoise  | 
| 16209 | Santiago Galapagos Tortoise  | 
| 738 | River Tortoise     | 
| 16207 | Volcan Wolf Galapagos Tortoise | 
| 16206 | Pinta Galapagos Tortoise   | 
| 16216 | Fernandina Galapagos Tortoise | 
| 16217 | Santa Fe Galapagos Tortoise  | 
| 16218 | Alcedo Galapagos Tortoise  | 
| 16219 | Cerro Azul Galapagos Tortoise | 
| 16220 | Rabida Galapagos Tortoise  | 
+-------+----------------------------------+ 
14 rows in set (0.00 sec) 

Lorsque je laisse tomber dans le shell Django et lancez:

query_set = Species.objects.filter(en_name__icontains='tortoise') 

Je reçois un seul résultat:

>>> for i in query_set: 
...  print i.en_name 
...  
River Tortoise 

En supposant que je dirais que c'est quelque chose à voir avec le nombre d'espaces dans le en_name chaîne (River Tortoise en a une alors que les autres en ont 1). J'ai également entendu que icontains peut se comporter différemment dans le développement et la production.

Quelqu'un peut-il nous éclairer à ce sujet?

+0

Exécuter ce, voir ce que sql est en fait en cours de création: >>> print query_set.query – Ted

+0

Beacuse ci-dessus est juste un exemple, si j'exécute print query_set.query alors je reçois un tas de jointures sur mon jeu de données réel. La partie importée arrive avec '... WHERE' mytable'.'en_name' LIKE% tortoise% '. Ne devrait-il pas être RLIKE? –

+0

Vous ne savez pas comment vous obtiendriez LIKE au lieu de ILIKE, mais voyez ma réponse pour savoir comment obtenir le comportement RLIKE que vous recherchez – Ted

Répondre

Questions connexes