#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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
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