#29810: Left outer join using FilteredRelation failed on empty result
-------------------------------------+-------------------------------------
     Reporter:  Dmitrii Azarenko     |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  2.0
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:  ORM                  |             Triage Stage:
  FilteredRelation                   |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by Dmitrii Azarenko:

Old description:

> 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
> [https://github.com/django/django/blob/2.0/tests/filtered_relation/tests.py#L9
> test module]:
> {{{#!div style="font-size: 80%"
> tests.filtered_relation.tests.FilteredRelationTests:
>   {{{#!python
> 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')
>     )
> }}}
> }}}
>
> This bug is typical since version 2.0 and exists until now.

New description:

 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
 [https://github.com/django/django/blob/2.0/tests/filtered_relation/tests.py#L9
 test module]:
 {{{#!div style="font-size: 80%"
 tests.filtered_relation.tests.FilteredRelationTests:
   {{{#!python
 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')
     )
 }}}
 }}}
 {{{#!div style="font-size: 80%"
 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.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/29810#comment:1>
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/064.353367764b9d565b457a8972fe41397e%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to