always sort count attributes to end
This commit is contained in:
parent
b5c6c7cf2b
commit
bd973ec3a9
@ -284,12 +284,17 @@ class RecipeSearch():
|
|||||||
|
|
||||||
def _favorite_recipes(self, timescooked=None):
|
def _favorite_recipes(self, timescooked=None):
|
||||||
if self._sort_includes('favorite') or timescooked:
|
if self._sort_includes('favorite') or timescooked:
|
||||||
|
lessthan = '-' in (timescooked or []) or not self._sort_includes('-favorite')
|
||||||
|
if lessthan:
|
||||||
|
default = 1000
|
||||||
|
else:
|
||||||
|
default = 0
|
||||||
favorite_recipes = CookLog.objects.filter(created_by=self._request.user, space=self._request.space, recipe=OuterRef('pk')
|
favorite_recipes = CookLog.objects.filter(created_by=self._request.user, space=self._request.space, recipe=OuterRef('pk')
|
||||||
).values('recipe').annotate(count=Count('pk', distinct=True)).values('count')
|
).values('recipe').annotate(count=Count('pk', distinct=True)).values('count')
|
||||||
self._queryset = self._queryset.annotate(favorite=Coalesce(Subquery(favorite_recipes), 0))
|
self._queryset = self._queryset.annotate(favorite=Coalesce(Subquery(favorite_recipes), default))
|
||||||
if timescooked is None:
|
if timescooked is None:
|
||||||
return
|
return
|
||||||
lessthan = '-' in timescooked
|
|
||||||
if timescooked == '0':
|
if timescooked == '0':
|
||||||
self._queryset = self._queryset.filter(favorite=0)
|
self._queryset = self._queryset.filter(favorite=0)
|
||||||
elif lessthan:
|
elif lessthan:
|
||||||
@ -377,9 +382,9 @@ class RecipeSearch():
|
|||||||
if rating or self._sort_includes('rating'):
|
if rating or self._sort_includes('rating'):
|
||||||
lessthan = self._sort_includes('-rating') or '-' in (rating or [])
|
lessthan = self._sort_includes('-rating') or '-' in (rating or [])
|
||||||
if lessthan:
|
if lessthan:
|
||||||
default = Value(0)
|
default = 100
|
||||||
else:
|
else:
|
||||||
default = Value(100)
|
default = 0
|
||||||
# TODO make ratings a settings user-only vs all-users
|
# TODO make ratings a settings user-only vs all-users
|
||||||
self._queryset = self._queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=self._request.user, then='cooklog__rating'), default=default))))
|
self._queryset = self._queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=self._request.user, then='cooklog__rating'), default=default))))
|
||||||
if rating is None:
|
if rating is None:
|
||||||
|
Loading…
Reference in New Issue
Block a user