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'), 'establishment.Establishment', verbose_name=_('establishment'),
on_delete=models.CASCADE) on_delete=models.CASCADE)
is_drinks_included = models.BooleanField(_('is drinks included'), default=False) 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( schedule = models.ManyToManyField(
to='timetable.Timetable', to='timetable.Timetable',
blank=True, blank=True,
@ -1306,9 +1307,13 @@ class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes):
class MenuFiles(FileMixin, BaseAttributes): class MenuFiles(FileMixin, BaseAttributes):
"""Menu files""" """Menu files"""
TYPES = (
('image', 'Image'),
('file', 'File')
)
name = models.CharField(_('name'), max_length=255, default='') 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: class Meta:
verbose_name = _('menu upload') verbose_name = _('menu upload')

View File

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

View File

@ -37,6 +37,8 @@ urlpatterns = [
# name='menu-dishes-gallery-create-destroy'), # name='menu-dishes-gallery-create-destroy'),
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'), path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'), 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/', views.PlateListCreateView.as_view(), name='plates'),
path('plates/<int:pk>/', views.PlateRUDView.as_view(), name='plate-rud'), path('plates/<int:pk>/', views.PlateRUDView.as_view(), name='plate-rud'),
path('social_choice/', views.SocialChoiceListCreateView.as_view(), name='socials_choice'), 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.shortcuts import get_object_or_404
from django_filters.rest_framework import DjangoFilterBackend 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 rest_framework.response import Response
from account.models import User from account.models import User
@ -136,6 +136,20 @@ class MenuRUDView(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [IsWineryReviewer | IsEstablishmentManager] 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): class SocialChoiceListCreateView(generics.ListCreateAPIView):
"""SocialChoice list create view.""" """SocialChoice list create view."""
serializer_class = serializers.SocialChoiceSerializers serializer_class = serializers.SocialChoiceSerializers
@ -466,7 +480,6 @@ class MenuDishesRUDView(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Menu.objects.dishes().distinct() queryset = models.Menu.objects.dishes().distinct()
permission_classes = [IsWineryReviewer | IsEstablishmentManager] permission_classes = [IsWineryReviewer | IsEstablishmentManager]
# class MenuGalleryListView(generics.ListAPIView): # class MenuGalleryListView(generics.ListAPIView):
# """Resource for returning gallery for menu for back-office users.""" # """Resource for returning gallery for menu for back-office users."""
# serializer_class = serializers.ImageBaseSerializer # serializer_class = serializers.ImageBaseSerializer