partners remastered (moved fields to binding table)
This commit is contained in:
parent
f05fab8329
commit
632233d930
|
|
@ -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',
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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'])
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user