fixed share write permission for meal plan
This commit is contained in:
parent
f23b566689
commit
7e5019eed3
@ -107,6 +107,7 @@ class ExtendedRecipeMixin():
|
|||||||
'''
|
'''
|
||||||
ExtendedRecipe annotates a queryset with recipe_image and recipe_count values
|
ExtendedRecipe annotates a queryset with recipe_image and recipe_count values
|
||||||
'''
|
'''
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def annotate_recipe(self, queryset=None, request=None, serializer=None, tree=False):
|
def annotate_recipe(self, queryset=None, request=None, serializer=None, tree=False):
|
||||||
extended = str2bool(request.query_params.get('extended', None))
|
extended = str2bool(request.query_params.get('extended', None))
|
||||||
@ -146,10 +147,10 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin):
|
|||||||
if fuzzy:
|
if fuzzy:
|
||||||
self.queryset = (
|
self.queryset = (
|
||||||
self.queryset
|
self.queryset
|
||||||
.annotate(starts=Case(When(name__istartswith=query, then=(Value(.3, output_field=IntegerField()))), default=Value(0)))
|
.annotate(starts=Case(When(name__istartswith=query, then=(Value(.3, output_field=IntegerField()))), default=Value(0)))
|
||||||
.annotate(trigram=TrigramSimilarity('name', query))
|
.annotate(trigram=TrigramSimilarity('name', query))
|
||||||
.annotate(sort=F('starts')+F('trigram'))
|
.annotate(sort=F('starts') + F('trigram'))
|
||||||
.order_by('-sort')
|
.order_by('-sort')
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# TODO have this check unaccent search settings or other search preferences?
|
# TODO have this check unaccent search settings or other search preferences?
|
||||||
@ -183,8 +184,8 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin):
|
|||||||
|
|
||||||
|
|
||||||
class MergeMixin(ViewSetMixin):
|
class MergeMixin(ViewSetMixin):
|
||||||
@ decorators.action(detail=True, url_path='merge/(?P<target>[^/.]+)', methods=['PUT'], )
|
@decorators.action(detail=True, url_path='merge/(?P<target>[^/.]+)', methods=['PUT'], )
|
||||||
@ decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer))
|
@decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer))
|
||||||
def merge(self, request, pk, target):
|
def merge(self, request, pk, target):
|
||||||
self.description = f"Merge {self.basename} onto target {self.basename} with ID of [int]."
|
self.description = f"Merge {self.basename} onto target {self.basename} with ID of [int]."
|
||||||
|
|
||||||
@ -280,8 +281,8 @@ class TreeMixin(MergeMixin, FuzzyFilterMixin, ExtendedRecipeMixin):
|
|||||||
|
|
||||||
return self.annotate_recipe(queryset=self.queryset, request=self.request, serializer=self.serializer_class, tree=True)
|
return self.annotate_recipe(queryset=self.queryset, request=self.request, serializer=self.serializer_class, tree=True)
|
||||||
|
|
||||||
@ decorators.action(detail=True, url_path='move/(?P<parent>[^/.]+)', methods=['PUT'], )
|
@decorators.action(detail=True, url_path='move/(?P<parent>[^/.]+)', methods=['PUT'], )
|
||||||
@ decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer))
|
@decorators.renderer_classes((TemplateHTMLRenderer, JSONRenderer))
|
||||||
def move(self, request, pk, parent):
|
def move(self, request, pk, parent):
|
||||||
self.description = f"Move {self.basename} to be a child of {self.basename} with ID of [int]. Use ID: 0 to move {self.basename} to the root."
|
self.description = f"Move {self.basename} to be a child of {self.basename} with ID of [int]. Use ID: 0 to move {self.basename} to the root."
|
||||||
if self.model.node_order_by:
|
if self.model.node_order_by:
|
||||||
@ -461,7 +462,7 @@ class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
|
|||||||
# onhand_status = self.queryset.annotate(onhand_status=Exists(onhand_users_set__in=[shared_users]))
|
# onhand_status = self.queryset.annotate(onhand_status=Exists(onhand_users_set__in=[shared_users]))
|
||||||
return self.queryset.annotate(shopping_status=Exists(shopping_status)).prefetch_related('onhand_users', 'inherit_fields').select_related('recipe', 'supermarket_category')
|
return self.queryset.annotate(shopping_status=Exists(shopping_status)).prefetch_related('onhand_users', 'inherit_fields').select_related('recipe', 'supermarket_category')
|
||||||
|
|
||||||
@ decorators.action(detail=True, methods=['PUT'], serializer_class=FoodShoppingUpdateSerializer,)
|
@decorators.action(detail=True, methods=['PUT'], serializer_class=FoodShoppingUpdateSerializer, )
|
||||||
# TODO DRF only allows one action in a decorator action without overriding get_operation_id_base() this should be PUT and DELETE probably
|
# TODO DRF only allows one action in a decorator action without overriding get_operation_id_base() this should be PUT and DELETE probably
|
||||||
def shopping(self, request, pk):
|
def shopping(self, request, pk):
|
||||||
if self.request.space.demo:
|
if self.request.space.demo:
|
||||||
@ -540,7 +541,7 @@ class MealPlanViewSet(viewsets.ModelViewSet):
|
|||||||
"""
|
"""
|
||||||
queryset = MealPlan.objects
|
queryset = MealPlan.objects
|
||||||
serializer_class = MealPlanSerializer
|
serializer_class = MealPlanSerializer
|
||||||
permission_classes = [CustomIsOwner]
|
permission_classes = [CustomIsOwner | CustomIsShared]
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
queryset = self.queryset.filter(
|
queryset = self.queryset.filter(
|
||||||
|
Loading…
Reference in New Issue
Block a user