partners
This commit is contained in:
parent
8806bc4e33
commit
f58ac2a1cc
|
|
@ -2,6 +2,7 @@
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
|
|
||||||
from partner.models import Partner
|
from partner.models import Partner
|
||||||
|
from django.core.validators import EMPTY_VALUES
|
||||||
|
|
||||||
|
|
||||||
class PartnerFilterSet(filters.FilterSet):
|
class PartnerFilterSet(filters.FilterSet):
|
||||||
|
|
@ -13,6 +14,7 @@ class PartnerFilterSet(filters.FilterSet):
|
||||||
choices=Partner.MODEL_TYPES,
|
choices=Partner.MODEL_TYPES,
|
||||||
help_text=f'Allows to filter partner list by partner type. '
|
help_text=f'Allows to filter partner list by partner type. '
|
||||||
f'Enum: {dict(Partner.MODEL_TYPES)}')
|
f'Enum: {dict(Partner.MODEL_TYPES)}')
|
||||||
|
ordering = filters.CharFilter(method='sort_partner')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -20,4 +22,13 @@ class PartnerFilterSet(filters.FilterSet):
|
||||||
fields = (
|
fields = (
|
||||||
'establishment',
|
'establishment',
|
||||||
'type',
|
'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
|
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):
|
class Partner(ProjectBaseMixin):
|
||||||
"""Partner model."""
|
"""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)
|
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)
|
country = models.ForeignKey('location.Country', null=True, default=None, on_delete=models.SET_NULL)
|
||||||
|
|
||||||
|
objects = PartnerQueryset.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('partner')
|
verbose_name = _('partner')
|
||||||
verbose_name_plural = _('partners')
|
verbose_name_plural = _('partners')
|
||||||
|
|
@ -36,6 +51,10 @@ class Partner(ProjectBaseMixin):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'{self.url}'
|
return f'{self.url}'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def type_display(self):
|
||||||
|
return self.MODEL_TYPES[self.type][1]
|
||||||
|
|
||||||
|
|
||||||
class PartnerToEstablishment(models.Model):
|
class PartnerToEstablishment(models.Model):
|
||||||
partner_bind_date = models.DateTimeField(default=timezone.now, editable=False,
|
partner_bind_date = models.DateTimeField(default=timezone.now, editable=False,
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,38 @@
|
||||||
"""Back account serializers"""
|
"""Back account serializers"""
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from partner.models import Partner
|
from partner.models import Partner
|
||||||
|
from establishment.serializers import EstablishmentShortSerializer
|
||||||
|
from location.serializers import CountrySimpleSerializer
|
||||||
|
from location.models import Country
|
||||||
|
|
||||||
|
|
||||||
class BackPartnerSerializer(serializers.ModelSerializer):
|
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:
|
class Meta:
|
||||||
model = Partner
|
model = Partner
|
||||||
fields = (
|
fields = (
|
||||||
'id',
|
'id',
|
||||||
'old_id',
|
|
||||||
'name',
|
'name',
|
||||||
'url',
|
'url',
|
||||||
'image',
|
'image',
|
||||||
'establishment',
|
|
||||||
'establishment_id',
|
|
||||||
'type',
|
'type',
|
||||||
|
'type_display',
|
||||||
'starting_date',
|
'starting_date',
|
||||||
'expiry_date',
|
'expiry_date',
|
||||||
'price_per_month',
|
'price_per_month',
|
||||||
|
'country',
|
||||||
|
'country_id',
|
||||||
|
'establishments',
|
||||||
)
|
)
|
||||||
|
extra_kwargs = {
|
||||||
|
'type': {'write_only': True},
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,8 @@ app_name = 'partner'
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.PartnerLstView.as_view(), name='partner-list-create'),
|
path('', views.PartnerLstView.as_view(), name='partner-list-create'),
|
||||||
path('<int:id>/', views.PartnerRUDView.as_view(), name='partner-rud'),
|
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.
|
"""Partner list/create view.
|
||||||
Allows to get partners for current country, or create a new one.
|
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
|
serializer_class = serializers.BackPartnerSerializer
|
||||||
pagination_class = None
|
pagination_class = None
|
||||||
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
|
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
|
||||||
|
# permission_classes = (permissions.AllowAny, )
|
||||||
filter_class = filters.PartnerFilterSet
|
filter_class = filters.PartnerFilterSet
|
||||||
|
|
||||||
|
|
||||||
class PartnerRUDView(generics.RetrieveUpdateDestroyAPIView):
|
class PartnerRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
"""Partner RUD view."""
|
"""Partner RUD view."""
|
||||||
queryset = Partner.objects.all()
|
queryset = Partner.objects.with_base_related()
|
||||||
serializer_class = serializers.BackPartnerSerializer
|
serializer_class = serializers.BackPartnerSerializer
|
||||||
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
|
permission_classes = [permissions.IsAdminUser | IsEstablishmentManager]
|
||||||
|
# permission_classes = (permissions.AllowAny, )
|
||||||
lookup_field = 'id'
|
lookup_field = 'id'
|
||||||
|
|
||||||
|
|
||||||
|
# class BindPartnerToEstablishmentView(generics.GenericAPIView):
|
||||||
|
# pass
|
||||||
|
|
||||||
|
|
||||||
|
# class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView):
|
||||||
|
# pass
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user