[1.1.X] Fixed #12851 -- Corrected the interaction of defer() with select_related(). Thanks to ruosteinen for the report.
Backport of r12817 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12818 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
eb1c7b033d
commit
4d00ac86ee
@ -996,7 +996,7 @@ def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0,
|
|||||||
else:
|
else:
|
||||||
next = None
|
next = None
|
||||||
cached_row = get_cached_row(f.rel.to, row, index_end, max_depth,
|
cached_row = get_cached_row(f.rel.to, row, index_end, max_depth,
|
||||||
cur_depth+1, next)
|
cur_depth+1, next, only_load=only_load)
|
||||||
if cached_row:
|
if cached_row:
|
||||||
rel_obj, index_end = cached_row
|
rel_obj, index_end = cached_row
|
||||||
if obj is not None:
|
if obj is not None:
|
||||||
|
@ -143,7 +143,7 @@ False
|
|||||||
[<class 'regressiontests.defer_regress.models.Item'>, <class 'regressiontests.defer_regress.models.RelatedItem'>, <class 'regressiontests.defer_regress.models.Child'>, <class 'regressiontests.defer_regress.models.Leaf'>]
|
[<class 'regressiontests.defer_regress.models.Item'>, <class 'regressiontests.defer_regress.models.RelatedItem'>, <class 'regressiontests.defer_regress.models.Child'>, <class 'regressiontests.defer_regress.models.Leaf'>]
|
||||||
|
|
||||||
>>> sorted(get_models(models.get_app('defer_regress'), include_deferred=True), key=lambda obj: obj._meta.object_name)
|
>>> sorted(get_models(models.get_app('defer_regress'), include_deferred=True), key=lambda obj: obj._meta.object_name)
|
||||||
[<class 'regressiontests.defer_regress.models.Child'>, <class 'regressiontests.defer_regress.models.Item'>, <class 'regressiontests.defer_regress.models.Item_Deferred_name'>, <class 'regressiontests.defer_regress.models.Item_Deferred_name_other_value_text'>, <class 'regressiontests.defer_regress.models.Item_Deferred_name_other_value_value'>, <class 'regressiontests.defer_regress.models.Item_Deferred_other_value_text_value'>, <class 'regressiontests.defer_regress.models.Item_Deferred_text_value'>, <class 'regressiontests.defer_regress.models.Leaf'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_child_id_second_child_id_value'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_name_value'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_second_child_value'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_value'>, <class 'regressiontests.defer_regress.models.RelatedItem'>, <class 'regressiontests.defer_regress.models.RelatedItem_Deferred_'>, <class 'regressiontests.defer_regress.models.RelatedItem_Deferred_item_id'>]
|
[<class 'regressiontests.defer_regress.models.Child'>, <class 'regressiontests.defer_regress.models.Child_Deferred_value'>, <class 'regressiontests.defer_regress.models.Item'>, <class 'regressiontests.defer_regress.models.Item_Deferred_name'>, <class 'regressiontests.defer_regress.models.Item_Deferred_name_other_value_text'>, <class 'regressiontests.defer_regress.models.Item_Deferred_name_other_value_value'>, <class 'regressiontests.defer_regress.models.Item_Deferred_other_value_text_value'>, <class 'regressiontests.defer_regress.models.Item_Deferred_text_value'>, <class 'regressiontests.defer_regress.models.Leaf'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_child_id_second_child_id_value'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_name_value'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_second_child_value'>, <class 'regressiontests.defer_regress.models.Leaf_Deferred_value'>, <class 'regressiontests.defer_regress.models.RelatedItem'>, <class 'regressiontests.defer_regress.models.RelatedItem_Deferred_'>, <class 'regressiontests.defer_regress.models.RelatedItem_Deferred_item_id'>]
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,4 +165,13 @@ Exercising select_related() with multi-table model inheritance.
|
|||||||
>>> Item.objects.select_related("child").order_by("name")
|
>>> Item.objects.select_related("child").order_by("name")
|
||||||
[<Item: item1>, <Item: item2>]
|
[<Item: item1>, <Item: item2>]
|
||||||
|
|
||||||
|
# Regression for #12851 - Deferred fields are used correctly if you
|
||||||
|
# select_related a subset of fields.
|
||||||
|
>>> wa = State.objects.create(name="Western Australia", country=australia)
|
||||||
|
>>> _ = Client.objects.create(name='Brian Burke', state=wa, status=active)
|
||||||
|
>>> burke = Client.objects.select_related('state').defer('state__name').get(name='Brian Burke')
|
||||||
|
>>> burke.state.name
|
||||||
|
u'Western Australia'
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user