diff --git a/apps/establishment/migrations/0080_auto_20200128_0904.py b/apps/establishment/migrations/0080_auto_20200128_0904.py new file mode 100644 index 00000000..e111fad5 --- /dev/null +++ b/apps/establishment/migrations/0080_auto_20200128_0904.py @@ -0,0 +1,40 @@ +# Generated by Django 2.2.7 on 2020-01-28 09:04 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('gallery', '0008_merge_20191212_0752'), + ('establishment', '0079_auto_20200124_0720'), + ] + + operations = [ + migrations.AlterField( + model_name='menuuploads', + name='file', + field=models.FileField(upload_to='', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=('doc', 'docx', 'pdf'))], verbose_name='File'), + ), + migrations.AlterField( + model_name='menuuploads', + name='menu', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='menu_uploads', to='establishment.Menu', verbose_name='menu'), + ), + migrations.CreateModel( + name='MenuGallery', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('is_main', models.BooleanField(default=False, verbose_name='Is the main image')), + ('image', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='menu_gallery', to='gallery.Image', verbose_name='image')), + ('menu', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='menu_gallery', to='establishment.Menu', verbose_name='menu')), + ], + options={ + 'verbose_name': 'menu gallery', + 'verbose_name_plural': 'menu galleries', + 'unique_together': {('menu', 'image'), ('menu', 'is_main')}, + }, + ), + ] diff --git a/apps/establishment/migrations/0081_menuuploads_title.py b/apps/establishment/migrations/0081_menuuploads_title.py new file mode 100644 index 00000000..820bdcb2 --- /dev/null +++ b/apps/establishment/migrations/0081_menuuploads_title.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.7 on 2020-01-28 09:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0080_auto_20200128_0904'), + ] + + operations = [ + migrations.AddField( + model_name='menuuploads', + name='title', + field=models.CharField(default='', max_length=255, verbose_name='title'), + ), + ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 5f575c78..07c8465d 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -1238,6 +1238,11 @@ class MenuQuerySet(models.QuerySet): 'plates', ) + def with_gallery(self): + return self.prefetch_related( + 'menu_gallery' + ) + def dishes(self): return self.filter( Q(category__icontains='starter') | @@ -1250,7 +1255,7 @@ class MenuQuerySet(models.QuerySet): return self.filter(category__icontains=value) -class Menu(TranslatedFieldsMixin, BaseAttributes): +class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes): """Menu model.""" STR_FIELD_NAME = 'category' @@ -1278,13 +1283,42 @@ class Menu(TranslatedFieldsMixin, BaseAttributes): ordering = ('-created',) +class MenuGallery(IntermediateGalleryModelMixin): + menu = models.ForeignKey( + Menu, + null=True, + related_name='menu_gallery', + on_delete=models.CASCADE, + verbose_name=_('menu'), + ) + image = models.ForeignKey( + 'gallery.Image', + null=True, + related_name='menu_gallery', + on_delete=models.CASCADE, + verbose_name=_('image'), + ) + + class Meta: + """Meta class.""" + verbose_name = _('menu gallery') + verbose_name_plural = _('menu galleries') + unique_together = (('menu', 'is_main'), ('menu', 'image')) + + class MenuUploads(BaseAttributes): """Menu files""" - menu = models.ForeignKey(Menu, verbose_name=_('Menu'), on_delete=models.CASCADE, related_name='uploads') + menu = models.ForeignKey( + Menu, + verbose_name=_('menu'), + on_delete=models.CASCADE, + related_name='menu_uploads', + ) + title = models.CharField(_('title'), max_length=255, default='') file = models.FileField( _('File'), - validators=[FileExtensionValidator(allowed_extensions=('jpg', 'jpeg', 'png', 'doc', 'docx', 'pdf')), ], + validators=[FileExtensionValidator(allowed_extensions=('doc', 'docx', 'pdf')), ], ) class Meta: diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index c9b2f2fe..d9a78f3e 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -560,13 +560,19 @@ class _PlateSerializer(ProjectModelSerializer): ] +class _MenuUploadsSerializer(serializers.Serializer): + id = serializers.IntegerField() + title = serializers.CharField() + original_url = serializers.URLField() + + class MenuDishesSerializer(ProjectModelSerializer): """for dessert, main_course and starter category""" - schedule = ScheduleRUDSerializer(many=True, allow_null=True) plates = _PlateSerializer(read_only=True, many=True, source='plate_set', allow_null=True) category_translated = serializers.CharField(read_only=True) last_update = serializers.DateTimeField(source='created') + gallery = ImageBaseSerializer(read_only=True, source='crop_gallery', many=True) class Meta: model = models.Menu @@ -579,6 +585,7 @@ class MenuDishesSerializer(ProjectModelSerializer): 'schedule', 'plates', 'last_update', + 'gallery', ] @@ -586,7 +593,6 @@ class MenuDishesRUDSerializers(ProjectModelSerializer): """for dessert, main_course and starter category""" plates = _PlateSerializer(read_only=True, many=True, source='plate_set', allow_null=True) - schedule = ScheduleRUDSerializer(read_only=True, many=True, allow_null=True) class Meta: model = models.Menu