Opened 6 years ago
Closed 6 years ago
#29810 closed Bug (fixed)
Left outer join using FilteredRelation failed on empty result
Reported by: | Dmitrii Azarenko | Owned by: | Can Sarıgöl |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | ORM FilteredRelation |
Cc: | Can Sarıgöl | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
When I try to join table with using FilteredRelation
clause it failed if the result of a joined table is null.
This error can be reproduce by adding the following test case to the corresponding test module:
tests.filtered_relation.tests.FilteredRelationTests:
def test_select_related_empty_join(self): self.assertFalse( Author.objects.annotate( empty_join=FilteredRelation('book', condition=Q( book__title='not existing book')), ).select_related('empty_join') )
Error:
............E.s................ ====================================================================== ERROR: test_select_related_empty_join (filtered_relation.tests.FilteredRelationTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.6/unittest/case.py", line 59, in testPartExecutor yield File "/usr/lib/python3.6/unittest/case.py", line 605, in run testMethod() File "/home/adv/projects/github/django/tests/filtered_relation/tests.py", line 46, in test_select_related_empty_join ).select_related('empty_join') File "/usr/lib/python3.6/unittest/case.py", line 674, in assertFalse if expr: File "/home/adv/projects/github/django/django/db/models/query.py", line 271, in __bool__ self._fetch_all() File "/home/adv/projects/github/django/django/db/models/query.py", line 1232, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/home/adv/projects/github/django/django/db/models/query.py", line 67, in __iter__ rel_populator.populate(row, obj) File "/home/adv/projects/github/django/django/db/models/query.py", line 1876, in populate self.local_setter(from_obj, obj) File "/home/adv/projects/github/django/django/db/models/sql/compiler.py", line 892, in local_setter f.remote_field.set_cached_value(from_obj, obj) File "/home/adv/projects/github/django/django/db/models/fields/mixins.py", line 23, in set_cached_value instance._state.fields_cache[self.get_cache_name()] = value AttributeError: 'NoneType' object has no attribute '_state' ----------------------------------------------------------------------
This bug is typical since version 2.0 and exists until now.
Change History (11)
comment:1 by , 6 years ago
Description: | modified (diff) |
---|
comment:2 by , 6 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:4 by , 6 years ago
Cc: | added |
---|---|
Has patch: | set |
comment:7 by , 6 years ago
Patch needs improvement: | unset |
---|
I hope the fails are not about me this time :)
comment:8 by , 6 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:9 by , 6 years ago
Patch needs improvement: | set |
---|---|
Version: | 2.0 → master |
comment:10 by , 6 years ago
Patch needs improvement: | unset |
---|
Note:
See TracTickets
for help on using tickets.
Reproduced at b3b47bf5156d400595363fa0029e51ce3f974ff0.