commit 707d862e01a7497a1f22879d314b865a35e0e85b
Author: smilerz <smilerz@gmail.com>
Date: Wed Apr 14 10:35:00 2021 -0500
works now
commit 3942a445ed4f2ccec57de25eacd86ea4e4dd6bdb
Author: smilerz <smilerz@gmail.com>
Date: Wed Apr 14 10:25:24 2021 -0500
updated serializer and api
commit 10dc746eb175c7f805a8a8ffa7ce49977a7ce97e
Author: smilerz <smilerz@gmail.com>
Date: Wed Apr 14 10:20:19 2021 -0500
fixed bookmarklet
commit 9779104902d3be0258c95cd2eeebcba0d5d48892
Merge: bb8262c 0cb3928
Author: smilerz <smilerz@gmail.com>
Date: Wed Apr 14 09:56:27 2021 -0500
Merge branch 'bookmarklet' into json_import
commit 0cb39284bb835ffc6cfee3e4306aadc4a64a25be
Author: smilerz <smilerz@gmail.com>
Date: Wed Apr 14 09:42:53 2021 -0500
retrieve bookmarklet ID from get
commit e89e0218de684d40b2e2bfb6ba833891206c828e
Author: smilerz <smilerz@gmail.com>
Date: Wed Apr 14 09:29:33 2021 -0500
Revert "fixed broken tab"
This reverts commit ca0a1aede3cc6cb3912bc1fe30c0aa22e3f481a6.
commit bb8262ccabb93c56fbc18c407d5a0653b8b3ca79
Merge: b1e73aa 35a7f62
Author: smilerz <smilerz@gmail.com>
Date: Sun Apr 11 20:35:57 2021 -0500
Merge branch 'main_fork' into json_import
84 lines
3.0 KiB
Python
84 lines
3.0 KiB
Python
import django_filters
|
|
from django.conf import settings
|
|
from django.contrib.postgres.search import TrigramSimilarity
|
|
from django.db.models import Q
|
|
from django.utils.translation import gettext as _
|
|
from django_scopes import scopes_disabled
|
|
|
|
from cookbook.forms import MultiSelectWidget
|
|
from cookbook.models import Food, Keyword, Recipe, ShoppingList
|
|
|
|
with scopes_disabled():
|
|
class RecipeFilter(django_filters.FilterSet):
|
|
name = django_filters.CharFilter(method='filter_name')
|
|
keywords = django_filters.ModelMultipleChoiceFilter(
|
|
queryset=Keyword.objects.none(),
|
|
widget=MultiSelectWidget,
|
|
method='filter_keywords'
|
|
)
|
|
foods = django_filters.ModelMultipleChoiceFilter(
|
|
queryset=Food.objects.none(),
|
|
widget=MultiSelectWidget,
|
|
method='filter_foods',
|
|
label=_('Ingredients')
|
|
)
|
|
|
|
def __init__(self, data=None, *args, **kwargs):
|
|
space = kwargs.pop('space')
|
|
super().__init__(data, *args, **kwargs)
|
|
self.filters['foods'].queryset = Food.objects.filter(space=space).all()
|
|
self.filters['keywords'].queryset = Keyword.objects.filter(space=space).all()
|
|
|
|
@staticmethod
|
|
def filter_keywords(queryset, name, value):
|
|
if not name == 'keywords':
|
|
return queryset
|
|
for x in value:
|
|
queryset = queryset.filter(keywords=x)
|
|
return queryset
|
|
|
|
@staticmethod
|
|
def filter_foods(queryset, name, value):
|
|
if not name == 'foods':
|
|
return queryset
|
|
for x in value:
|
|
queryset = queryset.filter(steps__ingredients__food__name=x).distinct()
|
|
return queryset
|
|
|
|
@staticmethod
|
|
def filter_name(queryset, name, value):
|
|
if not name == 'name':
|
|
return queryset
|
|
if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2',
|
|
'django.db.backends.postgresql']:
|
|
queryset = queryset.annotate(similarity=TrigramSimilarity('name', value), ).filter(
|
|
Q(similarity__gt=0.1) | Q(name__unaccent__icontains=value)).order_by('-similarity')
|
|
else:
|
|
queryset = queryset.filter(name__icontains=value)
|
|
return queryset
|
|
|
|
class Meta:
|
|
model = Recipe
|
|
fields = ['name', 'keywords', 'foods', 'internal']
|
|
|
|
|
|
class FoodFilter(django_filters.FilterSet):
|
|
name = django_filters.CharFilter(lookup_expr='icontains')
|
|
|
|
class Meta:
|
|
model = Food
|
|
fields = ['name']
|
|
|
|
|
|
class ShoppingListFilter(django_filters.FilterSet):
|
|
|
|
def __init__(self, data=None, *args, **kwargs):
|
|
if data is not None:
|
|
data = data.copy()
|
|
data.setdefault("finished", False)
|
|
super().__init__(data, *args, **kwargs)
|
|
|
|
class Meta:
|
|
model = ShoppingList
|
|
fields = ['finished']
|