partners remastered (moved fields to binding table)

This commit is contained in:
Kuroshini 2020-01-30 15:43:25 +03:00
parent f05fab8329
commit 632233d930
6 changed files with 37 additions and 18 deletions

View File

@ -1,7 +1,7 @@
"""Partner app filters."""
from django_filters import rest_framework as filters
from partner.models import Partner
from partner.models import Partner, PartnerToEstablishment
from django.core.validators import EMPTY_VALUES
@ -31,4 +31,20 @@ class PartnerFilterSet(filters.FilterSet):
if 'date_bind' in value:
value = value.replace('date_bind', 'partnertoestablishment__partner_bind_date')
queryset = queryset.order_by(value)
return queryset
return queryset
class PartnerToEstablishmentFilterSet(filters.FilterSet):
"""Partner to establishment filter set."""
type = filters.ChoiceFilter(
field_name='partner__type',
choices=Partner.MODEL_TYPES,
help_text=f'Allows to filter partner list by partner type. '
f'Enum: {dict(Partner.MODEL_TYPES)}')
class Meta:
model = PartnerToEstablishment
fields = (
'type',
)

View File

@ -39,9 +39,6 @@ class Partner(ProjectBaseMixin):
through='PartnerToEstablishment',
verbose_name=_('Establishments'))
type = models.PositiveSmallIntegerField(choices=MODEL_TYPES, default=PARTNER)
starting_date = models.DateField(_('starting date'), blank=True, null=True)
expiry_date = models.DateField(_('expiry date'), 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)
objects = PartnerQueryset.as_manager()
@ -61,6 +58,9 @@ class Partner(ProjectBaseMixin):
class PartnerToEstablishment(models.Model):
partner_bind_date = models.DateTimeField(default=timezone.now, editable=False,
verbose_name=_('Date partner binded'))
starting_date = models.DateField(_('starting date'), blank=True, null=True)
expiry_date = models.DateField(_('expiry date'), blank=True, null=True)
price_per_month = models.DecimalField(_('price per month'), max_digits=10, decimal_places=2, blank=True, null=True)
url = models.URLField(verbose_name=_('Establishment to Partner URL'), null=True, blank=True, default=None)
image = models.URLField(verbose_name=_('Partner image URL'), null=True)
partner = models.ForeignKey(Partner, on_delete=models.CASCADE, null=True)

View File

@ -23,13 +23,11 @@ class BackPartnerSerializer(serializers.ModelSerializer):
model = Partner
fields = (
'id',
'bind_id',
'name',
'images',
'type',
'type_display',
'starting_date',
'expiry_date',
'price_per_month',
'country',
'country_id',
# 'establishments',
@ -41,25 +39,23 @@ class BackPartnerSerializer(serializers.ModelSerializer):
class PartnersForEstablishmentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source='partner.pk', read_only=True)
bind_id = serializers.IntegerField(source='id', read_only=True)
name = serializers.CharField(source='partner.name', read_only=True)
type = serializers.IntegerField(source='partner.type', read_only=True)
type_display = serializers.CharField(source='partner.type_display', read_only=True)
starting_date = serializers.DateField(source='partner.starting_date', read_only=True)
expiry_date = serializers.DateField(source='partner.expiry_date', read_only=True)
price_per_month = serializers.DecimalField(source='partner.price_per_month', max_digits=10, decimal_places=2,
read_only=True)
country = CountrySimpleSerializer(read_only=True, source='partner.country')
class Meta:
model = PartnerToEstablishment
fields = (
'id',
'bind_id',
'name',
'type',
'type_display',
'starting_date',
'expiry_date',
'price_per_month',
'starting_date', # own field
'expiry_date', # own field
'price_per_month', # own field
'country',
'url', # own field
'image', # own field

View File

@ -13,6 +13,6 @@ urlpatterns = [
path('pictures/<int:id>/', views.PartnerPicturesListView.as_view(), name='partner-pictures-get'),
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.UnbindPartnerFromEstablishmentView.as_view(),
path('unbind/<int:bind_id>/', views.UnbindPartnerFromEstablishmentView.as_view(),
name='unbind-partner-from-establishment'),
]

View File

@ -28,6 +28,7 @@ class EstablishmentPartners(generics.ListAPIView):
queryset = PartnerToEstablishment.objects.prefetch_related('partner', 'partner__country')
serializer_class = serializers.PartnersForEstablishmentSerializer
pagination_class = None
# filter_class = filters.PartnerToEstablishmentFilterSet
filter_backends = (OrderingFilter, DjangoFilterBackend)
ordering_fields = '__all__'
ordering = '-partner_bind_date'
@ -77,5 +78,4 @@ class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView):
)
def get_object(self):
return get_object_or_404(PartnerToEstablishment, establishment_id=self.kwargs['establishment_id'],
partner_id=self.kwargs['partner_id'])
return get_object_or_404(PartnerToEstablishment, pk=self.kwargs['bind_id'])

View File

@ -50,6 +50,10 @@ class PartnerSerializer(serializers.Serializer):
old_id = validated_data.pop('old_id')
created = validated_data.pop('created')
expiry_date = validated_data.pop('expiry_date')
price_per_month = validated_data.pop('price_per_month')
starting_date = validated_data.pop('starting_date')
obj, is_created = Partner.objects.update_or_create(
# old_id=validated_data['old_id'],
**validated_data
@ -68,6 +72,9 @@ class PartnerSerializer(serializers.Serializer):
p_t_e = PartnerToEstablishment.objects.filter(establishment=establishment, partner=obj).first()
p_t_e.url = url
p_t_e.image = image
p_t_e.expiry_date = expiry_date
p_t_e.price_per_month = price_per_month
p_t_e.starting_date = starting_date
p_t_e.save()
return obj