From 4a6b32d9afc62769d58f138515aa296f35770a34 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Thu, 25 Jun 2020 23:24:09 +0200 Subject: [PATCH] super basic edit view --- cookbook/serializer.py | 32 +- .../templates/forms/edit_internal_recipe.html | 296 ++++++------------ cookbook/urls.py | 7 +- cookbook/views/api.py | 59 +++- cookbook/views/edit.py | 8 +- 5 files changed, 167 insertions(+), 235 deletions(-) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index a3a4c56a0..70260fdeb 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -1,7 +1,7 @@ from django.contrib.auth.models import User from rest_framework import serializers -from cookbook.models import MealPlan, MealType, Recipe, ViewLog, UserPreference, Storage, Sync, SyncLog, Keyword, Unit, Ingredient, Comment, RecipeImport, RecipeBook, RecipeBookEntry, ShareLink, CookLog, Food +from cookbook.models import MealPlan, MealType, Recipe, ViewLog, UserPreference, Storage, Sync, SyncLog, Keyword, Unit, Ingredient, Comment, RecipeImport, RecipeBook, RecipeBookEntry, ShareLink, CookLog, Food, Step from cookbook.templatetags.custom_tags import markdown @@ -42,12 +42,6 @@ class KeywordSerializer(serializers.ModelSerializer): fields = '__all__' -class RecipeSerializer(serializers.ModelSerializer): - class Meta: - model = Recipe - fields = '__all__' - - class UnitSerializer(serializers.ModelSerializer): class Meta: model = Unit @@ -61,14 +55,28 @@ class FoodSerializer(serializers.ModelSerializer): class IngredientSerializer(serializers.ModelSerializer): + food = FoodSerializer(read_only=True) + unit = UnitSerializer(read_only=True) + class Meta: model = Ingredient fields = '__all__' -class CommentSerializer(serializers.ModelSerializer): +class StepSerializer(serializers.ModelSerializer): + ingredients = IngredientSerializer(many=True, read_only=True) + class Meta: - model = Comment + model = Step + fields = '__all__' + + +class RecipeSerializer(serializers.ModelSerializer): + steps = StepSerializer(many=True, read_only=True) + keywords = KeywordSerializer(many=True, read_only=True) + + class Meta: + model = Recipe fields = '__all__' @@ -78,6 +86,12 @@ class RecipeImportSerializer(serializers.ModelSerializer): fields = '__all__' +class CommentSerializer(serializers.ModelSerializer): + class Meta: + model = Comment + fields = '__all__' + + class RecipeBookSerializer(serializers.ModelSerializer): class Meta: model = RecipeBook diff --git a/cookbook/templates/forms/edit_internal_recipe.html b/cookbook/templates/forms/edit_internal_recipe.html index a63f0627a..abaa50c7a 100644 --- a/cookbook/templates/forms/edit_internal_recipe.html +++ b/cookbook/templates/forms/edit_internal_recipe.html @@ -1,5 +1,4 @@ {% extends "base.html" %} -{% load crispy_forms_tags %} {% load i18n %} {% load custom_tags %} {% load theming_tags %} @@ -8,8 +7,11 @@ {% block title %}{% trans 'Edit Recipe' %}{% endblock %} {% block extra_head %} - - + + {% include 'include/vue_base.html' %} + + + {% endblock %} @@ -17,219 +19,101 @@

{% trans 'Edit Recipe' %}

-
- {% csrf_token %} +
+ +
+ + {% endblock %} \ No newline at end of file diff --git a/cookbook/urls.py b/cookbook/urls.py index 5ff1052a9..11e2613b8 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -10,9 +10,12 @@ from cookbook.helper import dal router = routers.DefaultRouter() router.register(r'user-preference', api.UserPreferenceViewSet) -router.register(r'recipe', api.RecipeViewSet) +router.register(r'unit', api.UnitViewSet) router.register(r'food', api.FoodViewSet) -router.register(r'recipe-ingredient', api.IngredientViewSet) +router.register(r'step', api.StepViewSet) +router.register(r'recipe', api.RecipeViewSet) +router.register(r'keyword', api.KeywordViewSet) +router.register(r'ingredient', api.IngredientViewSet) router.register(r'meal-plan', api.MealPlanViewSet) router.register(r'meal-type', api.MealTypeViewSet) router.register(r'view-log', api.ViewLogViewSet) diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 82563688e..6962dea51 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -18,10 +18,11 @@ from rest_framework.mixins import RetrieveModelMixin, UpdateModelMixin, ListMode from cookbook.helper.permission_helper import group_required, CustomIsOwner, CustomIsAdmin, CustomIsUser from cookbook.helper.recipe_url_import import get_from_html -from cookbook.models import Recipe, Sync, Storage, CookLog, MealPlan, MealType, ViewLog, UserPreference, RecipeBook, Ingredient, Food +from cookbook.models import Recipe, Sync, Storage, CookLog, MealPlan, MealType, ViewLog, UserPreference, RecipeBook, Ingredient, Food, Step, Keyword from cookbook.provider.dropbox import Dropbox from cookbook.provider.nextcloud import Nextcloud -from cookbook.serializer import MealPlanSerializer, MealTypeSerializer, RecipeSerializer, ViewLogSerializer, UserNameSerializer, UserPreferenceSerializer, RecipeBookSerializer, IngredientSerializer, FoodSerializer +from cookbook.serializer import MealPlanSerializer, MealTypeSerializer, RecipeSerializer, ViewLogSerializer, UserNameSerializer, UserPreferenceSerializer, RecipeBookSerializer, IngredientSerializer, FoodSerializer, StepSerializer, \ + KeywordSerializer class UserNameViewSet(viewsets.ModelViewSet): @@ -110,13 +111,37 @@ class MealTypeViewSet(viewsets.ModelViewSet): return queryset +class UnitViewSet(viewsets.ModelViewSet): + queryset = Food.objects.all() + serializer_class = FoodSerializer + permission_classes = [CustomIsUser] + + +class FoodViewSet(viewsets.ModelViewSet): + queryset = Food.objects.all() + serializer_class = FoodSerializer + permission_classes = [CustomIsUser] + + +class IngredientViewSet(viewsets.ModelViewSet): + queryset = Ingredient.objects.all() + serializer_class = IngredientSerializer + permission_classes = [CustomIsUser] + + +class StepViewSet(viewsets.ModelViewSet): + queryset = Step.objects.all() + serializer_class = StepSerializer + permission_classes = [CustomIsUser] + + class RecipeViewSet(viewsets.ModelViewSet): """ list: optional parameters - - **query**: search a recipe for a string contained in the recipe name (case in-sensitive) - - **limit**: limits the amount of returned recipes + - **query**: search recipes for a string contained in the recipe name (case in-sensitive) + - **limit**: limits the amount of returned results """ queryset = Recipe.objects.all() serializer_class = RecipeSerializer @@ -134,16 +159,28 @@ class RecipeViewSet(viewsets.ModelViewSet): return queryset -class IngredientViewSet(viewsets.ModelViewSet): - queryset = Ingredient.objects.all() - serializer_class = IngredientSerializer +class KeywordViewSet(viewsets.ModelViewSet): + """ + list: + optional parameters + + - **query**: search keywords for a string contained in the keyword name (case in-sensitive) + - **limit**: limits the amount of returned results + """ + queryset = Keyword.objects.all() + serializer_class = KeywordSerializer permission_classes = [CustomIsUser] + def get_queryset(self): + queryset = Keyword.objects.all() + query = self.request.query_params.get('query', None) + if query is not None: + queryset = queryset.filter(name__icontains=query) -class FoodViewSet(viewsets.ModelViewSet): - queryset = Food.objects.all() - serializer_class = FoodSerializer - permission_classes = [CustomIsUser] + limit = self.request.query_params.get('limit', None) + if limit is not None: + queryset = queryset[:int(limit)] + return queryset class ViewLogViewSet(viewsets.ModelViewSet): diff --git a/cookbook/views/edit.py b/cookbook/views/edit.py index 257d23530..5664f4260 100644 --- a/cookbook/views/edit.py +++ b/cookbook/views/edit.py @@ -124,14 +124,8 @@ def internal_recipe_update(request, pk): else: messages.add_message(request, messages.ERROR, _('There was an error saving this recipe!')) status = 403 - else: - form = InternalRecipeForm(instance=recipe_instance) - ingredients = Ingredient.objects.select_related('unit__name', 'food__name').filter(recipe=recipe_instance).values('food__name', 'unit__name', 'amount', 'note').order_by('id') - - return render(request, 'forms/edit_internal_recipe.html', - {'form': form, 'ingredients': json.dumps(list(ingredients)), - 'view_url': reverse('view_recipe', args=[pk])}, status=status) + return render(request, 'forms/edit_internal_recipe.html', {'recipe': recipe_instance}) class SyncUpdate(GroupRequiredMixin, UpdateView):