Opened 10 years ago
Last modified 10 years ago
#24833 closed Bug
Annotation with `Case` can't be used with `exclude` — at Initial Version
| Reported by: | Ram Rachum | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.8 |
| Severity: | Release blocker | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
n use .filter on it but you can't use .exclude. (You get various exceptions about .null and .get_col not existing.)
Example:
def my_view(request, *args, **kwargs):
things = models.Thing.objects.all().annotate(
bar=django.db.models.Case(
django.db.models.When(
foo='foo',
then=django.db.models.Value('bar')
),
default=django.db.models.Value('baz'),
output_field=django.db.models.CharField()
)
)
print(things.filter(bar='bar')) # This one works
print(things.exclude(bar='bar')) # This one doesn't
return django.http.HttpResponse(str(things))
Full working example attached to this ticket. (Simply run migrate, then runserver, then access the root URL to see the Django debug page for the exception.)
Note:
See TracTickets
for help on using tickets.
Full working example, run
migratethenrunserverthen access root url to see the exception