Opened 7 years ago
Closed 7 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 , 7 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 7 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
Version 0, edited 7 years ago by (next)
comment:4 by , 7 years ago
| Cc: | added |
|---|---|
| Has patch: | set |
comment:7 by , 7 years ago
| Patch needs improvement: | unset |
|---|
I hope the fails are not about me this time :)
comment:8 by , 7 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:9 by , 7 years ago
| Patch needs improvement: | set |
|---|---|
| Version: | 2.0 → master |
comment:10 by , 7 years ago
| Patch needs improvement: | unset |
|---|
Note:
See TracTickets
for help on using tickets.