Clarified custom lookups output_field documentation

This commit is contained in:
Andy Chosak 2014-11-03 15:34:32 +02:00 committed by Anssi Kääriäinen
parent 12e5b87b89
commit d3e71a6daa
1 changed files with 18 additions and 2 deletions

View File

@ -142,8 +142,24 @@ applied, Django uses the ``output_field`` attribute. We didn't need to specify
this here as it didn't change, but supposing we were applying ``AbsoluteValue`` this here as it didn't change, but supposing we were applying ``AbsoluteValue``
to some field which represents a more complex type (for example a point to some field which represents a more complex type (for example a point
relative to an origin, or a complex number) then we may have wanted to specify relative to an origin, or a complex number) then we may have wanted to specify
``output_field = FloatField``, which will ensure that further lookups like that the transform returns a ``FloatField`` type for further lookups. This can
``abs__lte`` behave as they would for a ``FloatField``. be done by adding an ``output_field`` attribute to the transform::
from django.db.models import FloatField, Transform
class AbsoluteValue(Transform):
lookup_name = 'abs'
def as_sql(self, qn, connection):
lhs, params = qn.compile(self.lhs)
return "ABS(%s)" % lhs, params
@property
def output_field(self):
return FloatField()
This ensures that further lookups like ``abs__lte`` behave as they would for
a ``FloatField``.
Writing an efficient abs__lt lookup Writing an efficient abs__lt lookup
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~