Skip to content

Commit 97885d8

Browse files
committed
* proper DBResource prefetch_related support
1 parent 7cc131b commit 97885d8

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

djangodav/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@
1919
# You should have received a copy of the GNU Affero General Public License
2020
# along with DjangoDav. If not, see <http://www.gnu.org/licenses/>.
2121

22-
VERSION = (0, 0, 1, 'beta', 17)
23-
__version__ = "0.0.1b17"
22+
VERSION = (0, 0, 1, 'beta', 18)
23+
__version__ = "0.0.1b18"

djangodav/db/resources.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,18 @@ def get_model_by_path(self, model_attr, path):
159159
for part in reversed(path):
160160
args.append(Q(**{"__".join(([self.collection_attribute] * i) + [self.name_attribute]): part}))
161161
i += 1
162-
args.append(Q(**{"__".join([self.collection_attribute] * len(path)): None}))
163-
related = ["__".join([self.collection_attribute] * i) for i in range(1, len(path))]
164-
related += getattr(self, "%s_select_related" % model_attr)
165-
166162
qs = getattr(self, "%s_model" % model_attr).objects.filter(**self.get_model_kwargs())
167-
if related:
168-
qs = qs.select_related(*related)
163+
164+
select_related = ["__".join([self.collection_attribute] * i) for i in range(1, len(path))]
165+
select_related += getattr(self, "%s_select_related" % model_attr)
166+
if select_related:
167+
qs = qs.select_related(*select_related)
168+
169+
prefetch_related = getattr(self, "%s_prefetch_related" % model_attr)
170+
if prefetch_related:
171+
qs = qs.prefetch_related(*prefetch_related)
172+
173+
args.append(Q(**{"__".join([self.collection_attribute] * len(path)): None}))
169174
try:
170175
return qs.filter(reduce(and_, args))[0]
171176
except IndexError:

0 commit comments

Comments
 (0)