carousel fin

This commit is contained in:
alex 2019-11-01 08:41:56 +03:00
parent 4cdcc8988b
commit 68182e837c
3 changed files with 63 additions and 17 deletions

View File

@ -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),
),
]

View File

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

View File

@ -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