Added menus method

This commit is contained in:
dormantman 2020-01-29 15:17:15 +03:00
parent e067e8e793
commit bcc5f2da51
6 changed files with 155 additions and 38 deletions

View File

@ -0,0 +1,69 @@
# Generated by Django 2.2.7 on 2020-01-29 11:13
from django.conf import settings
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import utils.methods
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('establishment', '0083_establishment_instagram'),
]
operations = [
migrations.CreateModel(
name='MenuFiles',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('file', models.FileField(blank=True, default=None, null=True, upload_to=utils.methods.file_path, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=('jpg', 'jpeg', 'png', 'doc', 'docx', 'pdf'))], verbose_name='File')),
('name', models.CharField(default='', max_length=255, verbose_name='name')),
('type', models.CharField(default='', max_length=65, verbose_name='type')),
('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='menufiles_records_created', to=settings.AUTH_USER_MODEL, verbose_name='created by')),
('modified_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='menufiles_records_modified', to=settings.AUTH_USER_MODEL, verbose_name='modified by')),
],
options={
'verbose_name': 'menu upload',
'verbose_name_plural': 'menu uploads',
},
),
migrations.RemoveField(
model_name='menuuploads',
name='created_by',
),
migrations.RemoveField(
model_name='menuuploads',
name='menu',
),
migrations.RemoveField(
model_name='menuuploads',
name='modified_by',
),
migrations.AddField(
model_name='menu',
name='name',
field=models.CharField(default='', max_length=255, verbose_name='name'),
),
migrations.AlterField(
model_name='menu',
name='schedule',
field=models.ManyToManyField(blank=True, to='timetable.Timetable', verbose_name='Menu schedule'),
),
migrations.DeleteModel(
name='MenuGallery',
),
migrations.DeleteModel(
name='MenuUploads',
),
migrations.AddField(
model_name='menu',
name='uploads',
field=models.ManyToManyField(blank=True, to='establishment.MenuFiles', verbose_name='Menu files'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.7 on 2020-01-29 11:16
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('establishment', '0084_auto_20200129_1113'),
]
operations = [
migrations.AddField(
model_name='menu',
name='price',
field=models.IntegerField(blank=True, default=None, null=True, verbose_name='price'),
),
]

View File

@ -1283,6 +1283,7 @@ class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes):
'establishment.Establishment', verbose_name=_('establishment'),
on_delete=models.CASCADE)
is_drinks_included = models.BooleanField(_('is drinks included'), default=False)
price = models.IntegerField(blank=True, null=True, default=None, verbose_name=_('price'))
schedule = models.ManyToManyField(
to='timetable.Timetable',
blank=True,
@ -1306,9 +1307,13 @@ class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes):
class MenuFiles(FileMixin, BaseAttributes):
"""Menu files"""
TYPES = (
('image', 'Image'),
('file', 'File')
)
name = models.CharField(_('name'), max_length=255, default='')
type = models.CharField(_('type'), max_length=65, default='')
type = models.CharField(_('type'), choices=TYPES, max_length=65, default='')
class Meta:
verbose_name = _('menu upload')

View File

@ -2,6 +2,7 @@
import logging
from django.conf import settings
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext_lazy as _
from phonenumber_field.phonenumber import to_python as str_to_phonenumber
from rest_framework import serializers
@ -9,24 +10,18 @@ from rest_framework import serializers
from comment import models as comment_models
from comment.serializers import common as comment_serializers
from establishment import models
from establishment.models import Establishment
from location.serializers import (
AddressBaseSerializer, CityBaseSerializer, AddressDetailSerializer,
CityShortSerializer,
)
from location.serializers import (
EstablishmentWineRegionBaseSerializer,
EstablishmentWineOriginBaseSerializer,
AddressBaseSerializer, AddressDetailSerializer, CityBaseSerializer,
CityShortSerializer, EstablishmentWineOriginBaseSerializer, EstablishmentWineRegionBaseSerializer,
)
from main.serializers import AwardSerializer, CurrencySerializer
from review.serializers import ReviewShortSerializer
from tag.serializers import TagBaseSerializer
from timetable.serialziers import ScheduleRUDSerializer
from utils import exceptions as utils_exceptions
from utils.serializers import ImageBaseSerializer, CarouselCreateSerializer
from utils.serializers import (
CarouselCreateSerializer, FavoritesCreateSerializer, ImageBaseSerializer,
ProjectModelSerializer, TranslatedField,
FavoritesCreateSerializer,
)
logger = logging.getLogger(__name__)
@ -77,22 +72,41 @@ class PlateSerializer(ProjectModelSerializer):
]
class MenuFilesSerializers(ProjectModelSerializer):
menu_id = serializers.IntegerField(write_only=True)
class Meta:
model = models.MenuFiles
fields = [
'id',
'name',
'type',
'file',
'menu_id'
]
def create(self, validated_data):
menu_id = validated_data.pop('menu_id')
menu = get_object_or_404(models.Menu, pk=menu_id)
instance = models.MenuFiles.objects.create(**validated_data)
menu.uploads.add(instance)
return instance
class MenuSerializers(ProjectModelSerializer):
name = serializers.CharField()
establishment_id = serializers.PrimaryKeyRelatedField(queryset=models.Establishment.objects.all())
establishment_slug = serializers.CharField(read_only=True, source='establishment.slug')
price = serializers.IntegerField(read_only=True, source='establishment.price_level', required=False)
drinks_included = serializers.BooleanField(source='is_drinks_included', required=FavoritesCreateSerializer)
price = serializers.IntegerField(required=False)
drinks_included = serializers.BooleanField(source='is_drinks_included', required=False)
schedules = ScheduleRUDSerializer(many=True, allow_null=True, required=False)
uploads = serializers.FileField(allow_null=True, required=False)
category_translated = serializers.CharField(read_only=True)
uploads = MenuFilesSerializers(many=True, read_only=True)
class Meta:
model = models.Menu
fields = [
'id',
'name',
'establishment',
'establishment_id',
'establishment_slug',
'price',
@ -100,39 +114,35 @@ class MenuSerializers(ProjectModelSerializer):
'schedules',
'uploads',
'category',
'category_translated',
]
def create(self, validated_data):
print(validated_data, '\n\n\n\n\n')
establishment = models.Establishment.objects.get(pk=validated_data.pop('establishment'))
validated_data['establishment'] = establishment['id']
validated_data['establishment'] = validated_data.pop('establishment_id')
instance = models.Menu.objects.create(**validated_data)
return instance
'''
{
"name": "Menu test",
"establishment_id": 1,
"price": 1,
"drinks_included": true,
"schedules": [],
"uploads": null,
"category": null
}
'''
class MenuRUDSerializers(ProjectModelSerializer):
plates = PlateSerializer(read_only=True, many=True, source='plate_set')
name = serializers.CharField()
establishment_id = serializers.PrimaryKeyRelatedField(read_only=True)
establishment_slug = serializers.CharField(read_only=True, source='establishment.slug')
price = serializers.IntegerField(required=False)
drinks_included = serializers.BooleanField(source='is_drinks_included', required=False)
schedules = ScheduleRUDSerializer(many=True, allow_null=True, required=False)
uploads = MenuFilesSerializers(many=True)
class Meta:
model = models.Menu
fields = [
'id',
'name',
'establishment_id',
'establishment_slug',
'price',
'drinks_included',
'schedules',
'uploads',
'category',
'plates',
'establishment'
]
@ -566,7 +576,7 @@ class EstablishmentCommentBaseSerializer(comment_serializers.CommentBaseSerializ
'created',
'text',
'mark',
'nickname',
# 'nickname',
'profile_pic',
'status',
'status_display',
@ -606,7 +616,7 @@ class EstablishmentCommentRUDSerializer(comment_serializers.CommentBaseSerialize
'created',
'text',
'mark',
'nickname',
# 'nickname',
'profile_pic',
]

View File

@ -37,6 +37,8 @@ urlpatterns = [
# name='menu-dishes-gallery-create-destroy'),
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
path('menus/uploads/', views.MenuFilesListCreateView.as_view(), name='menu-files-list'),
path('menus/uploads/<int:pk>/', views.MenuFilesRUDView.as_view(), name='menu-files-rud'),
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
path('plates/<int:pk>/', views.PlateRUDView.as_view(), name='plate-rud'),
path('social_choice/', views.SocialChoiceListCreateView.as_view(), name='socials_choice'),

View File

@ -2,7 +2,7 @@
from django.shortcuts import get_object_or_404
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics, permissions, response
from rest_framework import generics, permissions
from rest_framework.response import Response
from account.models import User
@ -136,6 +136,20 @@ class MenuRUDView(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
class MenuFilesListCreateView(generics.ListCreateAPIView):
"""Menu files list create view."""
serializer_class = serializers.MenuFilesSerializers
queryset = models.MenuFiles.objects.all()
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
class MenuFilesRUDView(generics.RetrieveDestroyAPIView):
"""Menu files RUD view."""
serializer_class = serializers.MenuFilesSerializers
queryset = models.MenuFiles.objects.all()
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
class SocialChoiceListCreateView(generics.ListCreateAPIView):
"""SocialChoice list create view."""
serializer_class = serializers.SocialChoiceSerializers
@ -466,7 +480,6 @@ class MenuDishesRUDView(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Menu.objects.dishes().distinct()
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
# class MenuGalleryListView(generics.ListAPIView):
# """Resource for returning gallery for menu for back-office users."""
# serializer_class = serializers.ImageBaseSerializer