wip serializer permission

This commit is contained in:
vabene1111
2021-02-23 20:44:13 +01:00
parent 40387428e7
commit 59cc22a877

View File

@@ -5,6 +5,7 @@ from drf_writable_nested import (UniqueFieldsMixin,
WritableNestedModelSerializer) WritableNestedModelSerializer)
from rest_framework import serializers from rest_framework import serializers
from rest_framework.exceptions import ValidationError from rest_framework.exceptions import ValidationError
from rest_framework.serializers import BaseSerializer, Serializer
from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword, from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword,
MealPlan, MealType, NutritionInformation, Recipe, MealPlan, MealType, NutritionInformation, Recipe,
@@ -39,6 +40,12 @@ class CustomDecimalField(serializers.Field):
raise ValidationError('A valid number is required') raise ValidationError('A valid number is required')
class CreateWithSpaceMixin(Serializer):
def create(self, validated_data):
validated_data['space'] = self.context['request'].space
return super().create(validated_data)
class UserNameSerializer(WritableNestedModelSerializer): class UserNameSerializer(WritableNestedModelSerializer):
username = serializers.SerializerMethodField('get_user_label') username = serializers.SerializerMethodField('get_user_label')
@@ -61,7 +68,7 @@ class UserPreferenceSerializer(serializers.ModelSerializer):
read_only_fields = ['user'] read_only_fields = ['user']
class StorageSerializer(serializers.ModelSerializer): class StorageSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = Storage model = Storage
fields = ( fields = (
@@ -75,7 +82,7 @@ class StorageSerializer(serializers.ModelSerializer):
} }
class SyncSerializer(serializers.ModelSerializer): class SyncSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = Sync model = Sync
fields = ( fields = (
@@ -84,7 +91,7 @@ class SyncSerializer(serializers.ModelSerializer):
) )
class SyncLogSerializer(serializers.ModelSerializer): class SyncLogSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = SyncLog model = SyncLog
fields = ('id', 'sync', 'status', 'msg', 'created_at') fields = ('id', 'sync', 'status', 'msg', 'created_at')
@@ -147,7 +154,7 @@ class SupermarketCategorySerializer(UniqueFieldsMixin, WritableNestedModelSerial
fields = ('id', 'name') fields = ('id', 'name')
class SupermarketCategoryRelationSerializer(serializers.ModelSerializer): class SupermarketCategoryRelationSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
category = SupermarketCategorySerializer() category = SupermarketCategorySerializer()
class Meta: class Meta:
@@ -155,7 +162,7 @@ class SupermarketCategoryRelationSerializer(serializers.ModelSerializer):
fields = ('id', 'category', 'supermarket', 'order') fields = ('id', 'category', 'supermarket', 'order')
class SupermarketSerializer(UniqueFieldsMixin, serializers.ModelSerializer): class SupermarketSerializer(UniqueFieldsMixin, serializers.ModelSerializer, CreateWithSpaceMixin):
category_to_supermarket = SupermarketCategoryRelationSerializer(many=True, read_only=True) category_to_supermarket = SupermarketCategoryRelationSerializer(many=True, read_only=True)
class Meta: class Meta:
@@ -255,7 +262,7 @@ class RecipeImageSerializer(WritableNestedModelSerializer):
fields = ['image', ] fields = ['image', ]
class RecipeImportSerializer(serializers.ModelSerializer): class RecipeImportSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = RecipeImport model = RecipeImport
fields = '__all__' fields = '__all__'
@@ -267,7 +274,7 @@ class CommentSerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
class RecipeBookSerializer(serializers.ModelSerializer): class RecipeBookSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = RecipeBook model = RecipeBook
fields = '__all__' fields = '__all__'
@@ -280,13 +287,14 @@ class RecipeBookEntrySerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
class MealTypeSerializer(serializers.ModelSerializer): class MealTypeSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = MealType model = MealType
fields = '__all__' fields = ('name', 'order', 'created_by')
read_only_fields = ('space',)
class MealPlanSerializer(serializers.ModelSerializer): class MealPlanSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
recipe_name = serializers.ReadOnlyField(source='recipe.name') recipe_name = serializers.ReadOnlyField(source='recipe.name')
meal_type_name = serializers.ReadOnlyField(source='meal_type.name') meal_type_name = serializers.ReadOnlyField(source='meal_type.name')
note_markdown = serializers.SerializerMethodField('get_note_markdown') note_markdown = serializers.SerializerMethodField('get_note_markdown')
@@ -304,7 +312,7 @@ class MealPlanSerializer(serializers.ModelSerializer):
) )
class ShoppingListRecipeSerializer(serializers.ModelSerializer): class ShoppingListRecipeSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
recipe_name = serializers.ReadOnlyField(source='recipe.name') recipe_name = serializers.ReadOnlyField(source='recipe.name')
servings = CustomDecimalField() servings = CustomDecimalField()
@@ -314,7 +322,7 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer):
read_only_fields = ('id',) read_only_fields = ('id',)
class ShoppingListEntrySerializer(WritableNestedModelSerializer): class ShoppingListEntrySerializer(WritableNestedModelSerializer, CreateWithSpaceMixin):
food = FoodSerializer(allow_null=True) food = FoodSerializer(allow_null=True)
unit = UnitSerializer(allow_null=True, required=False) unit = UnitSerializer(allow_null=True, required=False)
amount = CustomDecimalField() amount = CustomDecimalField()
@@ -332,7 +340,7 @@ class ShoppingListEntryCheckedSerializer(serializers.ModelSerializer):
fields = ('id', 'checked') fields = ('id', 'checked')
class ShoppingListSerializer(WritableNestedModelSerializer): class ShoppingListSerializer(WritableNestedModelSerializer, CreateWithSpaceMixin):
recipes = ShoppingListRecipeSerializer(many=True, allow_null=True) recipes = ShoppingListRecipeSerializer(many=True, allow_null=True)
entries = ShoppingListEntrySerializer(many=True, allow_null=True) entries = ShoppingListEntrySerializer(many=True, allow_null=True)
shared = UserNameSerializer(many=True) shared = UserNameSerializer(many=True)
@@ -356,7 +364,7 @@ class ShoppingListAutoSyncSerializer(WritableNestedModelSerializer):
read_only_fields = ('id',) read_only_fields = ('id',)
class ShareLinkSerializer(serializers.ModelSerializer): class ShareLinkSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = ShareLink model = ShareLink
fields = '__all__' fields = '__all__'
@@ -365,6 +373,7 @@ class ShareLinkSerializer(serializers.ModelSerializer):
class CookLogSerializer(serializers.ModelSerializer): class CookLogSerializer(serializers.ModelSerializer):
def create(self, validated_data): # TODO make mixin def create(self, validated_data): # TODO make mixin
validated_data['created_by'] = self.context['request'].user validated_data['created_by'] = self.context['request'].user
validated_data['space'] = self.context['request'].space
return super().create(validated_data) return super().create(validated_data)
class Meta: class Meta:
@@ -373,7 +382,7 @@ class CookLogSerializer(serializers.ModelSerializer):
read_only_fields = ('id', 'created_by') read_only_fields = ('id', 'created_by')
class ViewLogSerializer(serializers.ModelSerializer): class ViewLogSerializer(serializers.ModelSerializer, CreateWithSpaceMixin):
class Meta: class Meta:
model = ViewLog model = ViewLog
fields = '__all__' fields = '__all__'