diff --git a/apps/main/migrations/0026_auto_20191101_0500.py b/apps/main/migrations/0026_auto_20191101_0500.py new file mode 100644 index 00000000..55ecaad0 --- /dev/null +++ b/apps/main/migrations/0026_auto_20191101_0500.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.4 on 2019-11-01 05:00 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0025_carousel_is_parse'), + ] + + operations = [ + migrations.AlterField( + model_name='carousel', + name='content_type', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), + ), + migrations.AlterField( + model_name='carousel', + name='object_id', + field=models.PositiveIntegerField(blank=True, default=None, null=True), + ), + ] diff --git a/apps/main/models.py b/apps/main/models.py index b02e3142..7dee5cf0 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -130,7 +130,6 @@ class SiteSettingsQuerySet(models.QuerySet): class SiteSettings(ProjectBaseMixin): - subdomain = models.CharField(max_length=255, db_index=True, unique=True, verbose_name=_('Subdomain')) country = models.OneToOneField(Country, on_delete=models.PROTECT, @@ -282,8 +281,8 @@ class CarouselQuerySet(models.QuerySet): class Carousel(models.Model): """Carousel model.""" - content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) - object_id = models.PositiveIntegerField() + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, blank=True, null=True, default=None) + object_id = models.PositiveIntegerField(blank=True, null=True, default=None) content_object = generic.GenericForeignKey('content_type', 'object_id') old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) diff --git a/apps/transfer/serializers/carousel.py b/apps/transfer/serializers/carousel.py index a2a3d21a..3f1e8ecb 100644 --- a/apps/transfer/serializers/carousel.py +++ b/apps/transfer/serializers/carousel.py @@ -1,36 +1,59 @@ +from django.contrib.contenttypes.models import ContentType from rest_framework import serializers +from establishment.models import Establishment from main.models import Carousel +from news.models import News + + +def get_obj_data(model, slug): + try: + obj = model.objects.get(slug=slug) + except model.DoesNotExist: + return None, None + else: + content_type = ContentType.objects.get_for_model(obj) + return obj.id, content_type.id class CarouselSerializer(serializers.Serializer): id = serializers.IntegerField() - title = serializers.CharField(allow_null=True) + title = serializers.CharField(allow_null=True, allow_blank=True) link = serializers.CharField(allow_null=True) - link_title = serializers.CharField(allow_null=True) - description = serializers.CharField(allow_null=True) + link_title = serializers.CharField(allow_null=True, allow_blank=True) + description = serializers.CharField(allow_null=True, allow_blank=True) attachment_suffix_url = serializers.CharField(allow_null=True) active = serializers.IntegerField() def create(self, validated_data): + object_id, content_type_id = self.get_content_type(validated_data) validated_data.update({ 'active': bool(int(validated_data['active'])), - 'content_type': self.get_content_type(validated_data), - 'object_id': self.get_object_id(validated_data), - 'content_object': self.get_content_object(validated_data), - 'is_parse': False, + 'content_type_id': content_type_id, + 'object_id': object_id, + 'is_parse': bool(object_id), }) obj = Carousel.objects.create(**validated_data) return obj @staticmethod def get_content_type(data): - return None + link = data['link'] + if not link: + return None - @staticmethod - def get_object_id(data): - return None + obj_data = None, None + site = 'gaultmillau.com' + if site in link: + data = link.split('/') - @staticmethod - def get_content_object(data): - return None + try: + _type = data[3] + except IndexError: + pass + else: + if _type in ('news', 'pages'): + obj_data = get_obj_data(News, data[4]) + elif _type == 'restaurant': + obj_data = get_obj_data(Establishment, data[4]) + return obj_data