related object, populate the attribute correctly. Patch from Bastien Kleineidam. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8098 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
aee55ce524
commit
f48855178d
|
@ -785,7 +785,11 @@ def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0,
|
||||||
|
|
||||||
restricted = requested is not None
|
restricted = requested is not None
|
||||||
index_end = index_start + len(klass._meta.fields)
|
index_end = index_start + len(klass._meta.fields)
|
||||||
obj = klass(*row[index_start:index_end])
|
fields = row[index_start:index_end]
|
||||||
|
if not [x for x in fields if x is not None]:
|
||||||
|
# If we only have a list of Nones, there was not related object.
|
||||||
|
return None, index_end
|
||||||
|
obj = klass(*fields)
|
||||||
for f in klass._meta.fields:
|
for f in klass._meta.fields:
|
||||||
if not select_related_descend(f, restricted, requested):
|
if not select_related_descend(f, restricted, requested):
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
"""
|
"""
|
||||||
Regression tests for proper working of ForeignKey(null=True). Tests these bugs:
|
Regression tests for proper working of ForeignKey(null=True).
|
||||||
|
|
||||||
* #7369: FK non-null after null relationship on select_related() generates an invalid query
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
@ -38,7 +35,8 @@ __test__ = {'API_TESTS':"""
|
||||||
|
|
||||||
# Starting from comment, make sure that a .select_related(...) with a specified
|
# Starting from comment, make sure that a .select_related(...) with a specified
|
||||||
# set of fields will properly LEFT JOIN multiple levels of NULLs (and the things
|
# set of fields will properly LEFT JOIN multiple levels of NULLs (and the things
|
||||||
# that come after the NULLs, or else data that should exist won't).
|
# that come after the NULLs, or else data that should exist won't). Regression
|
||||||
|
# test for #7369.
|
||||||
>>> c = Comment.objects.select_related().get(id=1)
|
>>> c = Comment.objects.select_related().get(id=1)
|
||||||
>>> c.post
|
>>> c.post
|
||||||
<Post: First Post>
|
<Post: First Post>
|
||||||
|
@ -47,9 +45,11 @@ __test__ = {'API_TESTS':"""
|
||||||
None
|
None
|
||||||
|
|
||||||
>>> comments = Comment.objects.select_related('post__forum__system_info').all()
|
>>> comments = Comment.objects.select_related('post__forum__system_info').all()
|
||||||
>>> [(c.id, c.post.id) for c in comments]
|
>>> [(c.id, c.comment_text, c.post) for c in comments]
|
||||||
[(1, 1), (2, None)]
|
[(1, u'My first comment', <Post: First Post>), (2, u'My second comment', None)]
|
||||||
>>> [(c.comment_text, c.post.title) for c in comments]
|
|
||||||
[(u'My first comment', u'First Post'), (u'My second comment', None)]
|
# Regression test for #7530, #7716.
|
||||||
|
>>> Comment.objects.select_related('post').filter(post__isnull=True)[0].post is None
|
||||||
|
True
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
Loading…
Reference in New Issue