This commit is contained in:
Arthur
2019-04-20 15:15:32 +02:00
parent d8ac11921f
commit 2e7553b70c
46 changed files with 1871 additions and 721 deletions

View File

@@ -0,0 +1,56 @@
from rest_framework import serializers as ser
from .models import Recipe, Ingredient, IngredientWithAmount
class RecipeSerializer(ser.ModelSerializer):
class Meta:
model = Recipe
fields = ('id', 'name', 'category', 'ingredients')
class IngredientSerializer(ser.ModelSerializer):
class Meta:
model = Ingredient
fields = ('id', 'name')
class IngredientWithAmountSerializer(ser.ModelSerializer):
ingredient = IngredientSerializer()
class Meta:
model = IngredientWithAmount
fields = ('recipe', 'ingredient', 'amount', 'unit', 'display')
extra_kwargs = {
'recipe': { 'write_only': True },
}
def create(self, validated_data):
# TODO: better management of ingredient finding
ingredient, created = Ingredient.objects.get_or_create(
**validated_data.pop('ingredient')
)
if created:
ingredient.save()
validated_data['ingredient'] = ingredient
return IngredientWithAmount.objects.create(
**validated_data
)
def update(self, instance, validated_data):
for attr in ('recipe', 'amount', 'unit'):
setattr(
instance,
attr,
validated_data.get(attr,
getattr(instance, attr))
)
if 'ingredient' in validated_data:
ingdt, created = Ingredient.objects.get_or_create(
**validated_data['ingredient']
)
if created:
ingdt.save()
instance.ingredient = ingdt
instance.save()
return instance