Added menus method
This commit is contained in:
parent
e067e8e793
commit
bcc5f2da51
69
apps/establishment/migrations/0084_auto_20200129_1113.py
Normal file
69
apps/establishment/migrations/0084_auto_20200129_1113.py
Normal 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'),
|
||||
),
|
||||
]
|
||||
18
apps/establishment/migrations/0085_menu_price.py
Normal file
18
apps/establishment/migrations/0085_menu_price.py
Normal 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'),
|
||||
),
|
||||
]
|
||||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user