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()