clean models (tags)

This commit is contained in:
evgeniy-st 2019-10-15 18:25:09 +03:00
parent 42ae1cbb87
commit 9d4c483f51
12 changed files with 8 additions and 347 deletions

View File

@ -79,18 +79,3 @@ class MenuAdmin(admin.ModelAdmin):
return obj.category_translated
category_translated.short_description = _('category')
#
# @admin.register(models.EstablishmentTypeTagCategory)
# class EstablishmentTypeTagCategoryAdmin(admin.ModelAdmin):
# """EstablishmentTypeTagCategory admin."""
#
#
# @admin.register(models.EstablishmentSubTypeTagCategory)
# class EstablishmentSubTypeTagCategoryAdmin(admin.ModelAdmin):
# """EstablishmentTypeTagCategory admin."""
#
#
# @admin.register(models.EstablishmentTag)
# class EstablishmentTagAdmin(admin.ModelAdmin):
# """EstablishmentTag admin."""

View File

@ -16,29 +16,11 @@ from phonenumber_field.modelfields import PhoneNumberField
from collection.models import Collection
from location.models import Address
from main.models import Award
from tag.models import Tag, TagCategory
from review.models import Review
from utils.models import (ProjectBaseMixin, TJSONField, URLImageMixin,
TranslatedFieldsMixin, BaseAttributes)
class EstablishmentTypeQuerySet(models.QuerySet):
"""QuerySet for model EstablishmentType."""
def with_base_related(self):
"""Return QuerySet with base related."""
return self
# return self.prefetch_related(
# models.Prefetch('tag_categories',
# EstablishmentTypeTagCategory.objects.select_related('tag_category')),
# models.Prefetch('establishmentsubtype_set',
# EstablishmentSubType.objects.prefetch_related(
# models.Prefetch(
# 'tag_categories',
# EstablishmentSubTypeTagCategory.objects.select_related('tag_category'))))
# )
# todo: establishment type&subtypes check
class EstablishmentType(TranslatedFieldsMixin, ProjectBaseMixin):
"""Establishment type model."""
@ -52,8 +34,6 @@ class EstablishmentType(TranslatedFieldsMixin, ProjectBaseMixin):
related_name='establishment_types',
verbose_name=_('Tag'))
objects = EstablishmentTypeQuerySet.as_manager()
class Meta:
"""Meta class."""
@ -101,15 +81,8 @@ class EstablishmentQuerySet(models.QuerySet):
def with_base_related(self):
"""Return qs with related objects."""
return self
# return self.select_related('address', 'establishment_type').prefetch_related(
# models.Prefetch('tags',
# EstablishmentTag.objects.select_related('tag')),
# models.Prefetch('establishment_type__tag_categories',
# EstablishmentTypeTagCategory.objects.select_related('tag_category')),
# models.Prefetch('establishment_type__establishmentsubtype_set',
# EstablishmentSubType.objects.prefetch_related('tag_categories')),
# )
return self.select_related('address', 'establishment_type').\
prefetch_related('tags')
def with_extended_related(self):
return self.select_related('establishment_type').\
@ -587,81 +560,3 @@ class SocialNetwork(models.Model):
def __str__(self):
return self.title
#
# class EstablishmentTagQuerySet(models.QuerySet):
# """Establishment tag QuerySet."""
#
# def by_country_code(self, code):
# """Return establishment tags by establishment country code."""
# return self.filter(establishment__address__city__country__code=code)
#
# class EstablishmentTag(models.Model):
# """Establishment tag model."""
# tag = models.ForeignKey('tag.Tag',
# on_delete=models.CASCADE,
# related_name='tags',
# verbose_name=_('tag'))
# establishment = models.ForeignKey('establishment.Establishment',
# on_delete=models.CASCADE,
# related_name='tags',
# verbose_name=_('establishment'))
# objects = EstablishmentTagQuerySet.as_manager()
#
# class Meta:
# verbose_name = _('establishment tag')
# verbose_name_plural = _('establishment tags')
#
#
# class EstablishmentTypeTagCategoryQuerySet(models.QuerySet):
# """EstablishmentTypeTagCategory QuerySet."""
#
# def by_country_code(self, code):
# """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('establishment_type', 'tag_category')
#
#
# class EstablishmentTypeTagCategory(models.Model):
# """Tag categories based on establishment type."""
# establishment_type = models.ForeignKey(EstablishmentType,
# on_delete=models.CASCADE,
# related_name='tag_categories',
# verbose_name=_('establishment type'))
# tag_category = models.ForeignKey('tag.TagCategory',
# on_delete=models.CASCADE,
# related_name='est_type_tag_categories',
# verbose_name=_('tag category'))
# objects = EstablishmentTypeTagCategoryQuerySet.as_manager()
#
# 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."""
#
# def with_base_related(self):
# """Return queryset with base related."""
# return self.select_related('establishment_subtype', 'tag_category')
#
#
# 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')

View File

@ -1,16 +1,12 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from establishment import models
from establishment.serializers import (
EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer,
ContactPhonesSerializer, SocialNetworkRelatedSerializers,
EstablishmentTypeBaseSerializer, EstablishmentSubTypeBaseSerializer)
# EstablishmentTypeTagCategoryBaseSerializer)
EstablishmentTypeBaseSerializer)
from main.models import Currency
from tag.serializers import TagBaseSerializer
from utils.decorators import with_base_attributes
from utils.serializers import TranslatedField
class EstablishmentListCreateSerializer(EstablishmentBaseSerializer):
@ -144,96 +140,3 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
'user',
'name'
]
# class EstablishmentTagCreateSerializer(serializers.ModelSerializer):
# """Serializer for model EstablishmentTag."""
# class Meta:
# model = models.EstablishmentTag
# fields = [
# 'tag',
# 'establishment'
# ]
# extra_kwargs = {
# 'tag': {'write_only': True},
# 'establishment': {'write_only': True},
# }
#
# def validate(self, attrs):
# """Validate method."""
# establishment = attrs.get('establishment')
# tag = attrs.get('tag')
#
# # Check if tag is already added to establishment.
# if establishment.tags.filter(tag=tag).exists():
# raise serializers.ValidationError(detail={'detail': _('Tag is already added.')})
#
# # Сhecking tag availability for establishment type.
# if not establishment.establishment_type.use_subtypes:
# qs = establishment.establishment_type.tag_categories.filter(tag_category=tag.category)
# else:
# # Сhecking tag availability for establishment subtype.
# qs = establishment.establishment_type.tag_categories.filter(
# establishmentsubtype_set__tag_category=tag.category)
# if not qs.exists():
# raise serializers.ValidationError(
# detail={'detail': _('Tag is not available for this establishment type|subtype.')})
# return attrs
# class EstablishmentSubTypeTagCategoryBaseSerializer(serializers.ModelSerializer):
# """Serializer for intermediate model EstablishmentSubTypeTagCategories."""
# 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, read_only=True)
#
# class Meta:
# """Meta class."""
# model = models.EstablishmentSubTypeTagCategory
# fields = [
# 'id',
# 'label_translated',
# 'tags',
# '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.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 EstablishmentSubTypeSerializer(EstablishmentSubTypeBaseSerializer):
# """Extended serializer for EstablishmentSubType model with tags."""
# tag_categories = EstablishmentSubTypeTagCategoryBaseSerializer(many=True, read_only=True)
#
# class Meta(EstablishmentSubTypeBaseSerializer.Meta):
# """Meta class"""
# fields = [
# 'id',
# 'name_translated',
# 'tag_categories'
# ]
#
#
# class EstablishmentTagsByType(EstablishmentTypeBaseSerializer):
# """Tags by establishment type"""
# tag_categories = EstablishmentTypeTagCategoryBaseSerializer(many=True)
# subtypes = EstablishmentSubTypeSerializer(many=True, source='establishmentsubtype_set')
#
# class Meta(EstablishmentTypeBaseSerializer.Meta):
# """Meta class."""
# fields = [
# 'id',
# 'name_translated',
# 'tag_categories',
# 'subtypes',
# ]

View File

@ -139,36 +139,6 @@ class EstablishmentSubTypeBaseSerializer(serializers.ModelSerializer):
}
# class EstablishmentTypeTagCategoryBaseSerializer(serializers.ModelSerializer):
# """Serializer for intermediate model EstablishmentTypeTagCategories."""
# 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, read_only=True)
#
# class Meta:
# """Meta class."""
# model = models.EstablishmentTypeTagCategory
# fields = [
# '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 EstablishmentEmployeeSerializer(serializers.ModelSerializer):
"""Serializer for actual employees."""
@ -184,20 +154,6 @@ class EstablishmentEmployeeSerializer(serializers.ModelSerializer):
model = models.Employee
fields = ('id', 'name', 'position_translated', 'awards', 'priority')
#
# class EstablishmentTagSerializer(serializers.ModelSerializer):
# """Serializer for intermediate model EstablishmentTag."""
# id = serializers.IntegerField(source='tag.id')
# label_translated = serializers.CharField(source='tag.label_translated')
#
# class Meta:
# """Meta class."""
# model = models.EstablishmentTag
# fields = [
# 'id',
# 'label_translated'
# ]
class EstablishmentBaseSerializer(ProjectModelSerializer):
"""Base serializer for Establishment model."""

View File

@ -14,7 +14,6 @@ urlpatterns = [
name='schedule-rud'),
path('<int:pk>/schedule/', views.EstablishmentScheduleCreateView.as_view(),
name='schedule-create'),
# path('attach-tag/', views.EstablishmentTagCreateView.as_view(), name='attach-tag'),
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
@ -28,12 +27,7 @@ urlpatterns = [
path('employees/', views.EmployeeListCreateView.as_view(), name='employees'),
path('employees/<int:pk>/', views.EmployeeRUDView.as_view(), name='employees-rud'),
path('types/', views.EstablishmentTypeListCreateView.as_view(), name='type-list'),
# path('types/tags/', views.EstablishmentTypeTagListView.as_view(), name='type-tag-list'),
path('types/<int:pk>/', 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/<int:pk>/', views.EstablishmentSubtypeRUDView.as_view(), name='subtype-rud'),
# path('subtypes/attach-tag-category/', views.EstablishmentSubTypeAttachTagCategoryView.as_view(),
# name='subtype-attach-tag-category'),
]

View File

@ -7,7 +7,6 @@ app_name = 'establishment'
urlpatterns = [
path('', views.EstablishmentListView.as_view(), name='list'),
# path('types/tags/', views.EstablishmentTypeTagListView.as_view(), name='type-tag-list'),
path('recent-reviews/', views.EstablishmentRecentReviewListView.as_view(),
name='recent-reviews'),
path('slug/<slug:slug>/', views.EstablishmentRetrieveView.as_view(), name='detail'),

View File

@ -1,11 +1,9 @@
"""Establishment app views."""
from django.shortcuts import get_object_or_404
from rest_framework import generics, status, permissions
from rest_framework import generics
from establishment import models, serializers
from rest_framework.response import Response
from timetable.serialziers import ScheduleRUDSerializer, ScheduleCreateSerializer
from establishment.filters import EstablishmentTypeTagFilter
class EstablishmentMixinViews:
@ -55,25 +53,6 @@ class EstablishmentScheduleCreateView(generics.CreateAPIView):
serializer_class = ScheduleCreateSerializer
# 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 EstablishmentTagCreateView(EstablishmentMixinViews, generics.CreateAPIView):
# """Attach tag to establishment."""
# serializer_class = serializers.EstablishmentTagCreateSerializer
#
class MenuListCreateView(generics.ListCreateAPIView):
"""Menu list create view."""
serializer_class = serializers.MenuSerializers
@ -164,15 +143,6 @@ class EstablishmentTypeRUDView(generics.RetrieveUpdateDestroyAPIView):
queryset = models.EstablishmentType.objects.all()
# class EstablishmentTypeTagListView(generics.ListAPIView):
# """List of tags with categories by establishment type."""
# serializer_class = serializers.EstablishmentTagsByType
# queryset = models.EstablishmentType.objects.with_base_related()
# filter_class = EstablishmentTypeTagFilter
# permission_classes = (permissions.AllowAny, )
# pagination_class = None
class EstablishmentSubtypeListCreateView(generics.ListCreateAPIView):
"""Establishment subtype list/create view."""
serializer_class = serializers.EstablishmentSubTypeBaseSerializer
@ -184,17 +154,3 @@ class EstablishmentSubtypeRUDView(generics.RetrieveUpdateDestroyAPIView):
"""Establishment subtype retrieve/update/destroy view."""
serializer_class = serializers.EstablishmentSubTypeBaseSerializer
queryset = models.EstablishmentSubType.objects.all()
# class EstablishmentSubTypeAttachTagCategoryView(generics.CreateAPIView):
# """Attach tag category to establishment subtype."""
# serializer_class = serializers.EstablishmentSubTypeTagCategoryBaseSerializer
#
# def get_queryset(self):
# """Override get_queryset method."""
# return models.EstablishmentSubTypeTagCategory.objects.with_base_related()
#
# def post(self, request, *args, **kwargs):
# """Overridden post-method."""
# super(EstablishmentSubTypeAttachTagCategoryView, self).post(request)
# return Response(status=status.HTTP_200_OK)

View File

@ -1,8 +1,8 @@
from django.contrib import admin
from news import models
from .tasks import send_email_with_news
@admin.register(models.NewsType)
class NewsTypeAdmin(admin.ModelAdmin):
"""News type admin."""

View File

@ -7,7 +7,5 @@ app_name = 'news'
urlpatterns = [
path('', views.NewsListView.as_view(), name='list'),
path('types/', views.NewsTypeListView.as_view(), name='type'),
path('types/<int:pk>/tags/', views.NewsTypeTagsView.as_view(),
name='type-tags'),
path('slug/<slug:slug>/', views.NewsDetailView.as_view(), name='rud'),
]

View File

@ -3,7 +3,6 @@ from django.shortcuts import get_object_or_404
from rest_framework import generics, permissions
from news import filters, models, serializers
from rating.tasks import add_rating
from tag.serializers import TagCategoryDetailSerializer
class NewsMixinView:
@ -47,18 +46,6 @@ class NewsTypeListView(generics.ListAPIView):
serializer_class = serializers.NewsTypeSerializer
class NewsTypeTagsView(generics.ListAPIView):
"""Resource to get a list of tags for a news type."""
pagination_class = None
permission_classes = (permissions.AllowAny, )
serializer_class = TagCategoryDetailSerializer
def get_queryset(self):
news_type = get_object_or_404(models.NewsType, pk=self.kwargs.get('pk'))
return news_type.tag_categories.with_related()
class NewsBackOfficeMixinView:
"""News back office mixin view."""

View File

@ -49,9 +49,6 @@ class TagCategoryQuerySet(models.QuerySet):
"""Filter by existing tags."""
return self.filter(tags__isnull=not switcher)
def with_related(self):
return self.select_related('country').prefetch_related('tags')
class TagCategory(TranslatedFieldsMixin, models.Model):
"""Tag base category model."""

View File

@ -48,23 +48,14 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer):
)
class TagCategoryDetailSerializer(TagCategoryBaseSerializer):
"""Detailed serializer for TagCategory model."""
class Meta(TagCategoryBaseSerializer.Meta):
"""Meta class."""
fields = TagCategoryBaseSerializer.Meta.fields + ('tags', )
class TagCategoryBackOfficeDetailSerializer(TagCategoryDetailSerializer):
class TagCategoryBackOfficeDetailSerializer(TagCategoryBaseSerializer):
country_translated = TranslatedField(source='country.name_translated')
class Meta(TagCategoryDetailSerializer.Meta):
class Meta(TagBaseSerializer.Meta):
"""Meta class."""
fields = TagCategoryDetailSerializer.Meta.fields + (
fields = TagCategoryBaseSerializer.Meta.fields + (
'news_types',
'country',
'country_translated',