gault-millau/apps/transfer/serializers/advertisement.py
2019-11-15 21:04:37 +03:00

51 lines
1.5 KiB
Python

from rest_framework import serializers
from main.models import SiteSettings
from transfer.models import Sites
from advertisement.models import Advertisement
class AdvertisementSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
href = serializers.CharField()
site_id = serializers.PrimaryKeyRelatedField(
queryset=Sites.objects.all())
start_at = serializers.DateTimeField(allow_null=True)
expire_at = serializers.DateTimeField(allow_null=True)
class Meta:
"""Meta class."""
model = Advertisement
fields = [
'id',
'href',
'site_id',
'start_at',
'expire_at',
]
def validate(self, data):
data.update({
'old_id': data.pop('id'),
'url': data.pop('href'),
'site': self.get_site(data.pop('site_id')),
'start': data.pop('start_at', None),
'end': data.pop('expire_at', None),
})
return data
def create(self, validated_data):
site = validated_data.pop('site')
obj, _ = self.Meta.model.objects.get_or_create(validated_data)
if site and site not in obj.sites.all():
obj.sites.add(site)
return obj
def get_site(self, subdomain):
subdomain = subdomain.country_code_2 if isinstance(subdomain, Sites) else subdomain
qs = SiteSettings.objects.filter(subdomain=subdomain)
if qs.exists():
return qs.first()