select_related prefetch refactored
This commit is contained in:
parent
5c0dbe11f2
commit
22bcf20c7c
@ -88,15 +88,21 @@ class PackagesHandler(AnonymousBaseHandler):
|
|||||||
data = {}
|
data = {}
|
||||||
|
|
||||||
if 'category' in kwargs:
|
if 'category' in kwargs:
|
||||||
packages = Package.objects.for_category(kwargs['category'])
|
packages = Package.objects.for_category(
|
||||||
|
kwargs['category'],
|
||||||
|
last_versions=True
|
||||||
|
)
|
||||||
data = {'category': kwargs['category']}
|
data = {'category': kwargs['category']}
|
||||||
elif 'herd' in kwargs:
|
elif 'herd' in kwargs:
|
||||||
herd = Herd.objects.get(herd=kwargs['herd'])
|
herd = Herd.objects.get(herd=kwargs['herd'])
|
||||||
packages = Package.objects.for_herd(herd)
|
packages = Package.objects.for_herd(herd, last_versions=True)
|
||||||
data = {'herd': herd}
|
data = {'herd': herd}
|
||||||
elif 'maintainer_id' in kwargs:
|
elif 'maintainer_id' in kwargs:
|
||||||
maintainer = Maintainer.objects.get(id=kwargs['maintainer_id'])
|
maintainer = Maintainer.objects.get(id=kwargs['maintainer_id'])
|
||||||
packages = Package.objects.for_maintainer(maintainer)
|
packages = Package.objects.for_maintainer(
|
||||||
|
maintainer,
|
||||||
|
last_versions=True
|
||||||
|
)
|
||||||
data = {'maintainer': maintainer}
|
data = {'maintainer': maintainer}
|
||||||
|
|
||||||
data['packages'] = packages
|
data['packages'] = packages
|
||||||
|
@ -15,6 +15,14 @@ def xint(i):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def select_related_last_versions(queryset):
|
||||||
|
queryset = queryset.select_related(
|
||||||
|
'last_version_gentoo',
|
||||||
|
'last_version_overlay',
|
||||||
|
'last_version_upstream'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def version_key(version):
|
def version_key(version):
|
||||||
version = version.version
|
version = version.version
|
||||||
try:
|
try:
|
||||||
|
@ -3,7 +3,7 @@ djeuscan.managers
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from djeuscan.helpers import xint, rename_fields
|
from djeuscan.helpers import xint, rename_fields, select_related_last_versions
|
||||||
|
|
||||||
|
|
||||||
class PackageMixin(object):
|
class PackageMixin(object):
|
||||||
@ -90,48 +90,36 @@ class PackageMixin(object):
|
|||||||
)
|
)
|
||||||
return packages.filter(version__overlay=overlay).distinct()
|
return packages.filter(version__overlay=overlay).distinct()
|
||||||
|
|
||||||
def for_maintainer(self, maintainer):
|
def for_maintainer(self, maintainer, last_versions=False):
|
||||||
"""
|
"""
|
||||||
Returns packages that belong to the given maintainer
|
Returns packages that belong to the given maintainer
|
||||||
"""
|
"""
|
||||||
res = self.filter(maintainers__id=maintainer.id)
|
res = self.filter(maintainers__id=maintainer.id)
|
||||||
|
|
||||||
# performance boost
|
if last_versions:
|
||||||
res = res.select_related(
|
select_related_last_versions(res)
|
||||||
'last_version_gentoo',
|
|
||||||
'last_version_overlay',
|
|
||||||
'last_version_upstream'
|
|
||||||
)
|
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def for_herd(self, herd):
|
def for_herd(self, herd, last_versions=False):
|
||||||
"""
|
"""
|
||||||
Returns packages that belong to the given herd
|
Returns packages that belong to the given herd
|
||||||
"""
|
"""
|
||||||
res = self.filter(herds__id=herd.id)
|
res = self.filter(herds__id=herd.id)
|
||||||
|
|
||||||
# performance boost
|
if last_versions:
|
||||||
res = res.select_related(
|
select_related_last_versions(res)
|
||||||
'last_version_gentoo',
|
|
||||||
'last_version_overlay',
|
|
||||||
'last_version_upstream'
|
|
||||||
)
|
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def for_category(self, category):
|
def for_category(self, category, last_versions=False):
|
||||||
"""
|
"""
|
||||||
Returns packages that belong to the given category
|
Returns packages that belong to the given category
|
||||||
"""
|
"""
|
||||||
res = self.filter(category=category)
|
res = self.filter(category=category)
|
||||||
|
|
||||||
# performance boost
|
if last_versions:
|
||||||
res = res.select_related(
|
select_related_last_versions(res)
|
||||||
'last_version_gentoo',
|
|
||||||
'last_version_overlay',
|
|
||||||
'last_version_upstream'
|
|
||||||
)
|
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ def categories(request):
|
|||||||
|
|
||||||
@render_to('euscan/category.html')
|
@render_to('euscan/category.html')
|
||||||
def category(request, category):
|
def category(request, category):
|
||||||
packages = Package.objects.for_category(category)
|
packages = Package.objects.for_category(category, last_versions=True)
|
||||||
|
|
||||||
if not packages:
|
if not packages:
|
||||||
raise Http404
|
raise Http404
|
||||||
@ -59,7 +59,7 @@ def herds(request):
|
|||||||
@render_to('euscan/herd.html')
|
@render_to('euscan/herd.html')
|
||||||
def herd(request, herd):
|
def herd(request, herd):
|
||||||
herd = get_object_or_404(Herd, herd=herd)
|
herd = get_object_or_404(Herd, herd=herd)
|
||||||
packages = Package.for_herd(herd)
|
packages = Package.for_herd(herd, last_versions=True)
|
||||||
return {'herd': herd, 'packages': packages}
|
return {'herd': herd, 'packages': packages}
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ def maintainers(request):
|
|||||||
@render_to('euscan/maintainer.html')
|
@render_to('euscan/maintainer.html')
|
||||||
def maintainer(request, maintainer_id):
|
def maintainer(request, maintainer_id):
|
||||||
maintainer = get_object_or_404(Maintainer, pk=maintainer_id)
|
maintainer = get_object_or_404(Maintainer, pk=maintainer_id)
|
||||||
packages = Package.objects.for_maintainer(maintainer)
|
packages = Package.objects.for_maintainer(maintainer, last_versions=True)
|
||||||
return {'maintainer': maintainer, 'packages': packages}
|
return {'maintainer': maintainer, 'packages': packages}
|
||||||
|
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ def overlays(request):
|
|||||||
|
|
||||||
@render_to('euscan/overlay.html')
|
@render_to('euscan/overlay.html')
|
||||||
def overlay(request, overlay):
|
def overlay(request, overlay):
|
||||||
packages = Package.objects.for_overlay(overlay)
|
packages = Package.objects.for_overlay(overlay, last_versions=True)
|
||||||
if not packages:
|
if not packages:
|
||||||
raise Http404
|
raise Http404
|
||||||
return {'overlay': overlay, 'packages': packages}
|
return {'overlay': overlay, 'packages': packages}
|
||||||
|
Loading…
Reference in New Issue
Block a user