Question

Je le modèle et exemple suivant:

class Bashable(models.Model):
    name = models.CharField(max_length=100)

>>> foo = Bashable.objects.create(name=u"piñata")

Maintenant, je veux être en mesure de rechercher des objets, mais en utilisant des caractères ascii plutôt que unicode, quelque chose comme ceci:

>>> Bashable.objects.filter(name__lookslike="pinata")

Y at-il un moyen de Django pour faire ce genre de correspondance de chaîne approximative, en utilisant ascii-ins pour se tenir les caractères unicode dans la base de données?

Voici une question concernant , mais pour les données de base d'Apple.

Était-ce utile?

La solution

Essayez contre un « de-accentués » liste des noms si la recherche initiale échoue. Voici une fonction PHP remove_accents qui pourrait être traduit en python facilement: remove_accents ()

query = u"pinata"
r = Bashable.objects.filter(name=query)
if not r:
    accented = Bashable.objects.values('id', 'name')
    match_ids = [ obj['id'] for obj in accented 
                                if query in remove_accents(obj['name']) ]
    r = Blog.objects.in_bulk(match_ids)
return r

Et voici une entrée stackoverflow sur la correspondance de chaîne floue en python: # 682367

Autres conseils

La première réponse à cette question href="https://stackoverflow.com/questions/1410308/how-to-implement-unicode-string-matching-by-folding-in-python"> montre comment utiliser la fonction strip_accents qui est une fonction python pour obtenir ce que vous voulez. Ce n'est pas techniquement partie de Django, mais il est construit en Python.

scroll top