partners
This commit is contained in:
parent
8806bc4e33
commit
f58ac2a1cc
|
|
@ -2,6 +2,7 @@
|
|||
from django_filters import rest_framework as filters
|
||||
|
||||
from partner.models import Partner
|
||||
from django.core.validators import EMPTY_VALUES
|
||||
|
||||
|
||||
class PartnerFilterSet(filters.FilterSet):
|
||||
|
|
@ -13,6 +14,7 @@ class PartnerFilterSet(filters.FilterSet):
|
|||
choices=Partner.MODEL_TYPES,
|
||||
help_text=f'Allows to filter partner list by partner type. '
|
||||
f'Enum: {dict(Partner.MODEL_TYPES)}')
|
||||
ordering = filters.CharFilter(method='sort_partner')
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -20,4 +22,13 @@ class PartnerFilterSet(filters.FilterSet):
|
|||
fields = (
|
||||
'establishment',
|
||||
'type',
|
||||
'ordering',
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def sort_partner(queryset, name, value):
|
||||
if value not in EMPTY_VALUES:
|
||||
if 'date_bind' in value:
|
||||
value = value.replace('date_bind', 'partnertoestablishment__partner_bind_date')
|
||||
queryset = queryset.order_by(value)
|
||||
return queryset
|
||||
|
|
@ -6,6 +6,19 @@ from establishment.models import Establishment
|
|||
from utils.models import ImageMixin, ProjectBaseMixin
|
||||
|
||||
|
||||
class PartnerQueryset(models.QuerySet):
|
||||
|
||||
def with_base_related(self):
|
||||
return self.prefetch_related('establishment__establishment_type', 'establishment__establishment_subtypes',
|
||||
'establishment__awards', 'establishment__schedule', 'establishment__phones',
|
||||
'establishment__gallery', 'establishment__menu_set',
|
||||
'establishment__menu_set__plates', 'establishment__menu_set__plates__currency',
|
||||
'establishment__currency', 'establishment__address__city',
|
||||
'establishment__address__city__region',
|
||||
'establishment__address__city__region__country',
|
||||
'establishment__address__city__country', 'country')
|
||||
|
||||
|
||||
class Partner(ProjectBaseMixin):
|
||||
"""Partner model."""
|
||||
|
||||
|
|
@ -29,6 +42,8 @@ class Partner(ProjectBaseMixin):
|
|||
price_per_month = models.DecimalField(_('price per month'), max_digits=10, decimal_places=2, blank=True, null=True)
|
||||
country = models.ForeignKey('location.Country', null=True, default=None, on_delete=models.SET_NULL)
|
||||
|
||||
objects = PartnerQueryset.as_manager()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('partner')
|
||||
verbose_name_plural = _('partners')
|
||||
|
|
@ -36,6 +51,10 @@ class Partner(ProjectBaseMixin):
|
|||
def __str__(self):
|
||||
return f'{self.url}'
|
||||
|
||||
@property
|
||||
def type_display(self):
|
||||
return self.MODEL_TYPES[self.type][1]
|
||||
|
||||
|
||||
class PartnerToEstablishment(models.Model):
|
||||
partner_bind_date = models.DateTimeField(default=timezone.now, editable=False,
|
||||
|
|
|
|||
|
|
@ -1,21 +1,38 @@
|
|||
"""Back account serializers"""
|
||||
from rest_framework import serializers
|
||||
from partner.models import Partner
|
||||
from establishment.serializers import EstablishmentShortSerializer
|
||||
from location.serializers import CountrySimpleSerializer
|
||||
from location.models import Country
|
||||
|
||||
|
||||
class BackPartnerSerializer(serializers.ModelSerializer):
|
||||
establishments = EstablishmentShortSerializer(many=True, read_only=True, source='establishment')
|
||||
country = CountrySimpleSerializer(read_only=True)
|
||||
type_display = serializers.CharField(read_only=True)
|
||||
country_id = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Country.objects.all(),
|
||||
required=False,
|
||||
write_only=True,
|
||||
source='country'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Partner
|
||||
fields = (
|
||||
'id',
|
||||
'old_id',
|
||||
'name',
|
||||
'url',
|
||||
'image',
|
||||
'establishment',
|
||||
'establishment_id',
|
||||
'type',
|
||||
'type_display',
|
||||
'starting_date',
|
||||
'expiry_date',
|
||||
'price_per_month',
|
||||
'country',
|
||||
'country_id',
|
||||
'establishments',
|
||||
)
|
||||
extra_kwargs = {
|
||||
'type': {'write_only': True},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,4 +8,8 @@ app_name = 'partner'
|
|||
urlpatterns = [
|
||||
path('', views.PartnerLstView.as_view(), name='partner-list-create'),
|
||||
path('<int:id>/', views.PartnerRUDView.as_view(), name='partner-rud'),
|
||||
# path('bind/<int:partner_id>/<int:establishment_id>/', views.BindPartnerToEstablishmentView.as_view(),
|
||||
# name='bind-partner-to-establishment'),
|
||||
# path('unbind/<int:partner_id>/<int:establishment_id>/', views.BindPartnerToEstablishmentView.as_view(),
|
||||
# name='unbind-partner-from-establishment'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -10,16 +10,26 @@ class PartnerLstView(generics.ListCreateAPIView):
|
|||
"""Partner list/create view.
|
||||
Allows to get partners for current country, or create a new one.
|
||||
"""
|
||||
queryset = Partner.objects.all()
|
||||
queryset = Partner.objects.with_base_related()
|
||||
serializer_class = serializers.BackPartnerSerializer
|
||||
pagination_class = None
|
||||
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
|
||||
# permission_classes = (permissions.AllowAny, )
|
||||
filter_class = filters.PartnerFilterSet
|
||||
|
||||
|
||||
class PartnerRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""Partner RUD view."""
|
||||
queryset = Partner.objects.all()
|
||||
queryset = Partner.objects.with_base_related()
|
||||
serializer_class = serializers.BackPartnerSerializer
|
||||
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
|
||||
# permission_classes = (permissions.AllowAny, )
|
||||
lookup_field = 'id'
|
||||
|
||||
|
||||
# class BindPartnerToEstablishmentView(generics.GenericAPIView):
|
||||
# pass
|
||||
|
||||
|
||||
# class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView):
|
||||
# pass
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user