51 lines
1.5 KiB
Python
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()
|