#25258: ExpressionWrapper documentation should be expanded
--------------------------------------+------------------------------------
Reporter: tarkatronic | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Documentation | Version: 1.8
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Comment (by jarshwah):
`Q()` objects aren't actually expressions, but they are made from similar
base types, and support parts of the expression API by virtue of being
required by `Case Expressions`
https://docs.djangoproject.com/en/1.8/ref/models/conditional-expressions/.
I've seen quite a few cases of people using `Q()` objects as expressions
lately, when they really should be using Conditional Expressions instead.
So, I agree that something here needs to be fixed or documented. But
`ExpressionWrapper` really is only meant to be used to wrap existing
expressions, so I'm not too keen on documenting ExpressionWrapper further
at this point.
I guess we could define the output_field of Q() objects as always
returning a BooleanField but, again, they aren't exactly Expressions
themselves although they are close.
I think the better options here are:
1) Make Q() objects actual expressions (by implementing the full
expression API on them). Not sure if Q() expressions will always work as
annotations though, conditional expressions had some extra work to do to
be compliant cross database.
2) Highlight that Conditional Expressions should be used in the
documentation and error messages where Q() objects are mentioned. Erroring
early on direct Q() usage in annotations and guiding the user to Case/When
is what I imagine here.
I'm open to further suggestions.
--
Ticket URL: <https://code.djangoproject.com/ticket/25258#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" 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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/069.99fad353f71c07a79a8edb0632420398%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.