carousel fin
This commit is contained in:
parent
4cdcc8988b
commit
68182e837c
24
apps/main/migrations/0026_auto_20191101_0500.py
Normal file
24
apps/main/migrations/0026_auto_20191101_0500.py
Normal 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),
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user