serializer

This commit is contained in:
Tobias Lindenberg 2021-01-10 13:12:06 +01:00
parent 4c03d1eb87
commit ecf065db2b

View File

@ -1,18 +1,24 @@
from decimal import Decimal from decimal import Decimal
from django.contrib.auth.models import User from django.contrib.auth.models import User
from drf_writable_nested import WritableNestedModelSerializer, UniqueFieldsMixin from drf_writable_nested import (UniqueFieldsMixin,
WritableNestedModelSerializer)
from rest_framework import serializers from rest_framework import serializers
from rest_framework.exceptions import ValidationError from rest_framework.exceptions import ValidationError
from cookbook.models import MealPlan, MealType, Recipe, ViewLog, UserPreference, Storage, Sync, SyncLog, Keyword, Unit, Ingredient, Comment, RecipeImport, RecipeBook, RecipeBookEntry, ShareLink, CookLog, Food, Step, ShoppingList, \ from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword,
ShoppingListEntry, ShoppingListRecipe, NutritionInformation MealPlan, MealType, NutritionInformation, Recipe,
RecipeBook, RecipeBookEntry, RecipeImport,
ShareLink, ShoppingList, ShoppingListEntry,
ShoppingListRecipe, Step, Storage, Sync, SyncLog,
Unit, UserPreference, ViewLog)
from cookbook.templatetags.custom_tags import markdown from cookbook.templatetags.custom_tags import markdown
class CustomDecimalField(serializers.Field): class CustomDecimalField(serializers.Field):
""" """
Custom decimal field to normalize useless decimal places and allow commas as decimal separators Custom decimal field to normalize useless decimal places
and allow commas as decimal separators
""" """
def to_representation(self, value): def to_representation(self, value):
@ -47,15 +53,21 @@ class UserNameSerializer(WritableNestedModelSerializer):
class UserPreferenceSerializer(serializers.ModelSerializer): class UserPreferenceSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = UserPreference model = UserPreference
fields = ('user', 'theme', 'nav_color', 'default_unit', 'default_page', 'search_style', 'show_recent', fields = (
'plan_share', 'ingredient_decimals', 'comments') 'user', 'theme', 'nav_color', 'default_unit', 'default_page',
'search_style', 'show_recent', 'plan_share', 'ingredient_decimals',
'comments'
)
read_only_fields = ['user'] read_only_fields = ['user']
class StorageSerializer(serializers.ModelSerializer): class StorageSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Storage model = Storage
fields = ('id', 'name', 'method', 'username', 'password', 'token', 'created_by') fields = (
'id', 'name', 'method', 'username', 'password',
'token', 'created_by'
)
extra_kwargs = { extra_kwargs = {
'password': {'write_only': True}, 'password': {'write_only': True},
@ -66,7 +78,10 @@ class StorageSerializer(serializers.ModelSerializer):
class SyncSerializer(serializers.ModelSerializer): class SyncSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Sync model = Sync
fields = ('id', 'storage', 'path', 'active', 'last_checked', 'created_at', 'updated_at') fields = (
'id', 'storage', 'path', 'active', 'last_checked',
'created_at', 'updated_at'
)
class SyncLogSerializer(serializers.ModelSerializer): class SyncLogSerializer(serializers.ModelSerializer):
@ -82,13 +97,17 @@ class KeywordSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
return str(obj) return str(obj)
def create(self, validated_data): def create(self, validated_data):
# since multi select tags dont have id's duplicate names might be routed to create # since multi select tags dont have id's
# duplicate names might be routed to create
obj, created = Keyword.objects.get_or_create(**validated_data) obj, created = Keyword.objects.get_or_create(**validated_data)
return obj return obj
class Meta: class Meta:
model = Keyword model = Keyword
fields = ('id', 'name', 'icon', 'label', 'description', 'created_at', 'updated_at') fields = (
'id', 'name', 'icon', 'label', 'description',
'created_at', 'updated_at'
)
read_only_fields = ('id',) read_only_fields = ('id',)
@ -96,7 +115,8 @@ class KeywordSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
class UnitSerializer(UniqueFieldsMixin, serializers.ModelSerializer): class UnitSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
def create(self, validated_data): def create(self, validated_data):
# since multi select tags dont have id's duplicate names might be routed to create # since multi select tags dont have id's
# duplicate names might be routed to create
obj, created = Unit.objects.get_or_create(**validated_data) obj, created = Unit.objects.get_or_create(**validated_data)
return obj return obj
@ -109,7 +129,8 @@ class UnitSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
class FoodSerializer(UniqueFieldsMixin, serializers.ModelSerializer): class FoodSerializer(UniqueFieldsMixin, serializers.ModelSerializer):
def create(self, validated_data): def create(self, validated_data):
# since multi select tags dont have id's duplicate names might be routed to create # since multi select tags dont have id's
# duplicate names might be routed to create
obj, created = Food.objects.get_or_create(**validated_data) obj, created = Food.objects.get_or_create(**validated_data)
return obj return obj
@ -129,7 +150,10 @@ class IngredientSerializer(WritableNestedModelSerializer):
class Meta: class Meta:
model = Ingredient model = Ingredient
fields = ('id', 'food', 'unit', 'amount', 'note', 'order', 'is_header', 'no_amount') fields = (
'id', 'food', 'unit', 'amount', 'note', 'order',
'is_header', 'no_amount'
)
class StepSerializer(WritableNestedModelSerializer): class StepSerializer(WritableNestedModelSerializer):
@ -137,7 +161,10 @@ class StepSerializer(WritableNestedModelSerializer):
class Meta: class Meta:
model = Step model = Step
fields = ('id', 'name', 'type', 'instruction', 'ingredients', 'time', 'order', 'show_as_header') fields = (
'id', 'name', 'type', 'instruction', 'ingredients',
'time', 'order', 'show_as_header'
)
class NutritionInformationSerializer(serializers.ModelSerializer): class NutritionInformationSerializer(serializers.ModelSerializer):
@ -153,7 +180,11 @@ class RecipeSerializer(WritableNestedModelSerializer):
class Meta: class Meta:
model = Recipe model = Recipe
fields = ['id', 'name', 'image', 'keywords', 'steps', 'working_time', 'waiting_time', 'created_by', 'created_at', 'updated_at', 'internal', 'nutrition', 'servings'] fields = (
'id', 'name', 'image', 'keywords', 'steps', 'working_time',
'waiting_time', 'created_by', 'created_at', 'updated_at',
'internal', 'nutrition', 'servings'
)
read_only_fields = ['image', 'created_by', 'created_at'] read_only_fields = ['image', 'created_by', 'created_at']
def create(self, validated_data): def create(self, validated_data):
@ -209,7 +240,11 @@ class MealPlanSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = MealPlan model = MealPlan
fields = ('id', 'title', 'recipe', 'servings', 'note', 'note_markdown', 'date', 'meal_type', 'created_by', 'shared', 'recipe_name', 'meal_type_name') fields = (
'id', 'title', 'recipe', 'servings', 'note', 'note_markdown',
'date', 'meal_type', 'created_by', 'shared', 'recipe_name',
'meal_type_name'
)
class ShoppingListRecipeSerializer(serializers.ModelSerializer): class ShoppingListRecipeSerializer(serializers.ModelSerializer):
@ -229,7 +264,9 @@ class ShoppingListEntrySerializer(WritableNestedModelSerializer):
class Meta: class Meta:
model = ShoppingListEntry model = ShoppingListEntry
fields = ('id', 'list_recipe', 'food', 'unit', 'amount', 'order', 'checked') fields = (
'id', 'list_recipe', 'food', 'unit', 'amount', 'order', 'checked'
)
read_only_fields = ('id',) read_only_fields = ('id',)
@ -246,7 +283,10 @@ class ShoppingListSerializer(WritableNestedModelSerializer):
class Meta: class Meta:
model = ShoppingList model = ShoppingList
fields = ('id', 'uuid', 'note', 'recipes', 'entries', 'shared', 'finished', 'created_by', 'created_at',) fields = (
'id', 'uuid', 'note', 'recipes', 'entries',
'shared', 'finished', 'created_by', 'created_at'
)
read_only_fields = ('id',) read_only_fields = ('id',)