diff --git a/apps/establishment/migrations/0034_merge_20191009_1457.py b/apps/establishment/migrations/0034_merge_20191009_1457.py new file mode 100644 index 00000000..945860f7 --- /dev/null +++ b/apps/establishment/migrations/0034_merge_20191009_1457.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.4 on 2019-10-09 14:57 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0033_auto_20191009_0715'), + ('establishment', '0033_auto_20191003_0943_squashed_0034_auto_20191003_1036'), + ] + + operations = [ + ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index 74348f5d..c248ca5d 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -479,6 +479,7 @@ class ContactEmail(models.Model): def __str__(self): return f'{self.email}' + # # class Wine(TranslatedFieldsMixin, models.Model): # """Wine model.""" @@ -586,6 +587,11 @@ class EstablishmentTypeTagCategoryQuerySet(models.QuerySet): """Return establishment tags by country code""" return self.filter(tag_category__country__code=code) + def with_base_related(self): + """Return with related relations.""" + # return self.select_related('tags', 'establishment_type') + return self.select_related('establishment_type', 'tag_category') + class EstablishmentTypeTagCategory(models.Model): """Tag categories based on establishment type.""" @@ -602,3 +608,24 @@ class EstablishmentTypeTagCategory(models.Model): class Meta: verbose_name = _('establishment type tag categories') verbose_name_plural = _('establishment type tag categories') + + +# class EstablishmentSubTypeTagCategoryQuerySet(models.QuerySet): +# """QuerySet for tag categories based on establishment subtype.""" +# +# +# class EstablishmentSubTypeTagCategory(models.Model): +# """Tag categories based on establishment subtype.""" +# establishment_subtype = models.ForeignKey(EstablishmentSubType, +# on_delete=models.CASCADE, +# related_name='tag_categories', +# verbose_name=_('establishment subtype')) +# tag_category = models.ForeignKey('tag.TagCategory', +# on_delete=models.CASCADE, +# related_name='est_subtype_tag_categories', +# verbose_name=_('tag category')) +# objects = EstablishmentSubTypeTagCategoryQuerySet.as_manager() +# +# class Meta: +# verbose_name = _('establishment subtype tag categories') +# verbose_name_plural = _('establishment subtype tag categories') diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 8bd09e85..33d2e812 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -1,13 +1,12 @@ from rest_framework import serializers + from establishment import models from establishment.serializers import ( EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer, ContactPhonesSerializer, SocialNetworkRelatedSerializers, EstablishmentTypeSerializer) - -from utils.decorators import with_base_attributes - from main.models import Currency +from utils.decorators import with_base_attributes class EstablishmentListCreateSerializer(EstablishmentBaseSerializer): diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index 2cd4e429..ef21e4fb 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -89,11 +89,11 @@ class MenuRUDSerializers(ProjectModelSerializer): ] -class EstablishmentTagCategoryListSerializer(serializers.ModelSerializer): +class EstablishmentTypeTagCategoryBaseSerializer(serializers.ModelSerializer): """Serializer for intermediate model EstablishmentTypeTagCategories.""" - id = serializers.IntegerField(source='tag_category.id') + id = serializers.IntegerField(source='tag_category.id', read_only=True) label_translated = TranslatedField(source='tag_category.label_translated') - tags = TagBaseSerializer(source='tag_category.tags', many=True) + tags = TagBaseSerializer(source='tag_category.tags', many=True, read_only=True) class Meta: """Meta class.""" @@ -102,7 +102,21 @@ class EstablishmentTagCategoryListSerializer(serializers.ModelSerializer): 'id', 'label_translated', 'tags', + 'establishment_type', + 'tag_category', ] + extra_kwargs = { + 'establishment_type': {'write_only': True}, + 'tag_category': {'write_only': True}, + } + + def validate(self, attrs): + """Override validate method.""" + if models.EstablishmentTypeTagCategory.objects.filter( + establishment_type=attrs.get('establishment_type'), + tag_category=attrs.get('tag_category')).exists(): + raise serializers.ValidationError(detail={'detail': _('Objects is already attached.')}) + return attrs class EstablishmentTypeSerializer(serializers.ModelSerializer): @@ -136,6 +150,30 @@ class EstablishmentSubTypeSerializer(serializers.ModelSerializer): } +# class EstablishmentSubTypeTagCategoryBaseSerializer(serializers.ModelSerializer): +# """Serializer for intermediate model EstablishmentSubTypeTagCategories.""" +# +# class Meta: +# """Meta class.""" +# model = models.EstablishmentSubTypeTagCategory +# fields = [ +# 'establishment_subtype', +# 'tag_category', +# ] +# extra_kwargs = { +# 'establishment_subtype': {'write_only': True}, +# 'tag_category': {'write_only': True}, +# } +# +# def validate(self, attrs): +# """Override validate method.""" +# if models.EstablishmentSubTypeTagCategory.objects.filter( +# establishment_type=attrs.get('establishment_subtype'), +# tag_category=attrs.get('tag_category')).exists(): +# raise serializers.ValidationError(detail={'detail': _('Objects is already attached.')}) +# return attrs + + class ReviewSerializer(serializers.ModelSerializer): """Serializer for model Review.""" text_translated = serializers.CharField(read_only=True) diff --git a/apps/establishment/urls/back.py b/apps/establishment/urls/back.py index b04a6843..ad10ea1a 100644 --- a/apps/establishment/urls/back.py +++ b/apps/establishment/urls/back.py @@ -30,6 +30,10 @@ urlpatterns = [ path('employees//', views.EmployeeRUDView.as_view(), name='employees-rud'), path('types/', views.EstablishmentTypeListCreateView.as_view(), name='type-list'), path('types//', views.EstablishmentTypeRUDView.as_view(), name='type-rud'), + path('types/attach-tag-category/', views.EstablishmentTypeAttachTagCategoryView.as_view(), + name='type-attach-tag-category'), path('subtypes/', views.EstablishmentSubtypeListCreateView.as_view(), name='subtype-list'), path('subtypes//', views.EstablishmentSubtypeRUDView.as_view(), name='subtype-rud'), + # path('subtypes/attach-tag-category/', views.EstablishmentSubTypeAttachTagCategoryView.as_view(), + # name='subtype-attach-tag-category'), ] \ No newline at end of file diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 32ee2805..7d0949be 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -1,8 +1,9 @@ """Establishment app views.""" from django.shortcuts import get_object_or_404 -from rest_framework import generics +from rest_framework import generics, status from establishment import models, serializers +from rest_framework.response import Response from timetable.serialziers import ScheduleRUDSerializer, ScheduleCreateSerializer @@ -55,7 +56,7 @@ class EstablishmentScheduleCreateView(generics.CreateAPIView): class EstablishmentTagCategoryListView(EstablishmentMixinViews, generics.ListAPIView): """View for establishment tag categories.""" - serializer_class = serializers.EstablishmentTagCategoryListSerializer + serializer_class = serializers.EstablishmentTypeTagCategoryBaseSerializer pagination_class = None def get_object(self): @@ -81,6 +82,31 @@ class EstablishmentTagCategoryListView(EstablishmentMixinViews, generics.ListAPI return establishment.establishment_type.tag_categories.all() +class EstablishmentTypeAttachTagCategoryView(generics.CreateAPIView): + """Attach tag category to establishment type.""" + serializer_class = serializers.EstablishmentTypeTagCategoryBaseSerializer + + def get_queryset(self): + """Override get_queryset method.""" + return models.EstablishmentTypeTagCategory.objects.with_base_related() + + def post(self, request, *args, **kwargs): + """Overridden post-method.""" + super(EstablishmentTypeAttachTagCategoryView, self).post(request) + return Response(status=status.HTTP_200_OK) + + +# class EstablishmentSubTypeAttachTagCategoryView(generics.CreateAPIView): +# """Attach tag category to establishment subtype.""" +# queryset = models.EstablishmentSubTypeTagCategory.objects.all() +# serializer_class = serializers.EstablishmentSubTypeTagCategoryBaseSerializer +# +# def post(self, request, *args, **kwargs): +# """Overridden post-method.""" +# super(EstablishmentSubTypeAttachTagCategoryView, self).post(request) +# return Response(status=status.HTTP_200_OK) + + class MenuListCreateView(generics.ListCreateAPIView): """Menu list create view.""" serializer_class = serializers.MenuSerializers