From 59ecc40dc634e36b493611a900eeb974383b34b6 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Sat, 24 Feb 2024 13:18:08 +0100 Subject: [PATCH] added comment field and a recipe filter to cook log --- ...log_comment_cooklog_updated_at_and_more.py | 33 +++++++++++++++++++ cookbook/models.py | 7 ++-- cookbook/serializer.py | 6 ++-- cookbook/views/api.py | 5 +++ 4 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 cookbook/migrations/0214_cooklog_comment_cooklog_updated_at_and_more.py diff --git a/cookbook/migrations/0214_cooklog_comment_cooklog_updated_at_and_more.py b/cookbook/migrations/0214_cooklog_comment_cooklog_updated_at_and_more.py new file mode 100644 index 00000000..fe28d646 --- /dev/null +++ b/cookbook/migrations/0214_cooklog_comment_cooklog_updated_at_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.7 on 2024-02-24 12:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookbook', '0213_remove_property_property_unique_import_food_per_space_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='cooklog', + name='comment', + field=models.TextField(blank=True, null=True), + ), + migrations.AddField( + model_name='cooklog', + name='updated_at', + field=models.DateTimeField(auto_now=True), + ), + migrations.AlterField( + model_name='cooklog', + name='rating', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='cooklog', + name='servings', + field=models.IntegerField(blank=True, null=True), + ), + ] diff --git a/cookbook/models.py b/cookbook/models.py index fc1a62ad..f9c16607 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -1293,10 +1293,13 @@ class TelegramBot(models.Model, PermissionModelMixin): class CookLog(ExportModelOperationsMixin('cook_log'), models.Model, PermissionModelMixin): recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE) + rating = models.IntegerField(null=True, blank=True) + servings = models.IntegerField(null=True, blank=True) + comment = models.TextField(null=True, blank=True) + created_by = models.ForeignKey(User, on_delete=models.CASCADE) created_at = models.DateTimeField(default=timezone.now) - rating = models.IntegerField(null=True) - servings = models.IntegerField(default=0) + updated_at = models.DateTimeField(auto_now=True) space = models.ForeignKey(Space, on_delete=models.CASCADE) objects = ScopedManager(space='space') diff --git a/cookbook/serializer.py b/cookbook/serializer.py index e72c776d..cf815490 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -873,7 +873,7 @@ class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = '__all__' - read_only_fields = ['id', 'created_at', 'created_by', 'updated_at',] + read_only_fields = ['id', 'created_at', 'created_by', 'updated_at', ] class RecipeOverviewSerializer(RecipeBaseSerializer): @@ -1200,6 +1200,8 @@ class ShareLinkSerializer(SpacedModelSerializer): class CookLogSerializer(serializers.ModelSerializer): + created_by = UserSerializer(read_only=True) + def create(self, validated_data): validated_data['created_by'] = self.context['request'].user validated_data['space'] = self.context['request'].space @@ -1207,7 +1209,7 @@ class CookLogSerializer(serializers.ModelSerializer): class Meta: model = CookLog - fields = ('id', 'recipe', 'servings', 'rating', 'created_by', 'created_at') + fields = ('id', 'recipe', 'servings', 'rating', 'comment', 'created_by', 'created_at', 'updated_at') read_only_fields = ('id', 'created_by') diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 710a8e37..50e1b77f 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -1270,8 +1270,13 @@ class CookLogViewSet(viewsets.ModelViewSet): serializer_class = CookLogSerializer permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope] pagination_class = DefaultPagination + query_params = [ + QueryParam(name='recipe', description=_('Filter for entries with the given recipe'), qtype='integer'), + ] def get_queryset(self): + if self.request.query_params.get('recipe', None): + self.queryset = self.queryset.filter(recipe=self.request.query_params.get('recipe')) return self.queryset.filter(space=self.request.space)