Hi Jorgue,

As you already know there's no officially supported API to create custom 
lookups in Django < 1.7

However it's possible to get something working by monkey patching 
WhereNode.make_atom.

Here's an example GIST 
<https://gist.github.com/charettes/2c2db0c0c96afab3297a> that expose a 
decent API to add custom lookups.

>From importing the lookups module you should be able to register your 
custom lookup this way:

def db_prepare_customcomparison(value, connection, prepared):
    return [value.replace(' ', '').lower()]

lookups.register(
    'customcomparison',
    'replace(lower(%s), " ", "") = %%s',
    db_prepare=db_prepare_customcomparison,
)

Note that you should use this code at your own risk since it's messing with 
Django's internal and I would strongly advise you to move to 1.7 instead 
since 1.6 is approaching end of support.

Simon

Le mercredi 4 mars 2015 14:15:32 UTC-5, Jorge Arévalo a écrit :
>
> Hello,
>
> I'm trying to emulate a non-spaces-all-lower text comparison filter in 
> Django 1.6.x. In other words, I want the equivalent to this query
>
> select * from myapp_mymodel where replace(lower(str), " ", "") = 
> '<user_entry>'
> Being my model something like this
>
> from django.db import models
> class MyModel(models.Model):
>     num = models.IntegerField()
>     str = models.CharField(max_length=16)
>
>
> In my mind, this can be implemented with a custom lookup like this:
>
> MyModel.objects.filter(str__customcomparison='spaces and UPPERCASE will 
> not be taken into account')
>
> I know Django 1.7 allows custom lookups creation, but can't make Django 
> 1.6 work like this. I've tried implementing a custom QuerySet and a custom 
> Manager for MyModel. In the custom QuerySet, I override the method 
> _filter_or_exclude. 
>
> Am I in the right path? Any suggestion?
>
> Many thanks in advance
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/931f930b-01c2-48c7-a760-63cb51052781%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to