init
This commit is contained in:
56
recipe_book/serializers.py
Normal file
56
recipe_book/serializers.py
Normal 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
|
||||
Reference in New Issue
Block a user