diff options
| author | Andy Chosak <chosak@gmail.com> | 2014-11-03 15:34:32 +0200 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2014-11-03 16:00:34 +0200 |
| commit | d3e71a6daaf6f64e5efb45baf7b35269052d5d96 (patch) | |
| tree | 39fe14501cae062cb0eef86f1e8146d7c5b3a210 /docs | |
| parent | 12e5b87b89074cd0380ddcdadd24a6c621178c07 (diff) | |
Clarified custom lookups output_field documentation
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/howto/custom-lookups.txt | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/docs/howto/custom-lookups.txt b/docs/howto/custom-lookups.txt index c02b896071..4de15f8140 100644 --- a/docs/howto/custom-lookups.txt +++ b/docs/howto/custom-lookups.txt @@ -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`` 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 -``output_field = FloatField``, which will ensure that further lookups like -``abs__lte`` behave as they would for a ``FloatField``. +that the transform returns a ``FloatField`` type for further lookups. This can +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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
