Custom Handlers¶
What are handlers?¶
A handler is an object that you can use to define custom behavior when searching a field of a model.
You might want to use a handler if you are using a custom model field, or if your query contains information that requires client-side processing before being passed to the database.
Example¶
Lets say you have the following model:
from django.db import models
from django_find import Searchable
class Author(models.Model, Searchable):
name = models.CharField("Author Name", max_length=50)
Author.objects.create(name='Robert Frost')
Assuming you want to be able to filter for author names, but need to translate the name first, e.g.:
Author.by_query('name:robbie')
You can achieve this by defining a custom handler:
from django_find.handlers import type_registry, LowerCaseStrFieldHandler
nicknames = {'robbie': 'Robert Frost'}
class AuthorNameFieldHandler(LowerCaseStrFieldHandler):
@classmethod
def handles(cls, model, field):
return model._meta.model_name == 'author' and field.name == 'name'
@classmethod
def prepare(cls, data):
return nicknames.get(data, data)
type_registry.insert(0, AuthorNameFieldHandler)