refactored guide ad label photos
This commit is contained in:
parent
3bbd76a4f8
commit
86257153ac
34
apps/collection/migrations/0024_auto_20191213_0859.py
Normal file
34
apps/collection/migrations/0024_auto_20191213_0859.py
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-13 08:59
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('gallery', '0006_merge_20191027_1758'),
|
||||||
|
('collection', '0023_advertorial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='AdvertorialGallery',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('is_main', models.BooleanField(default=False, verbose_name='Is the main image')),
|
||||||
|
('advertorial', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='advertorial_gallery', to='collection.Advertorial', verbose_name='advertorial')),
|
||||||
|
('image', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='advertorial_gallery', to='gallery.Image', verbose_name='image')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'advertorial gallery',
|
||||||
|
'verbose_name_plural': 'advertorial galleries',
|
||||||
|
'unique_together': {('advertorial', 'image')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='advertorial',
|
||||||
|
name='gallery',
|
||||||
|
field=models.ManyToManyField(through='collection.AdvertorialGallery', to='gallery.Image'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -10,6 +10,7 @@ from utils.models import ProjectBaseMixin, URLImageMixin
|
||||||
from utils.models import TJSONField
|
from utils.models import TJSONField
|
||||||
from utils.models import TranslatedFieldsMixin
|
from utils.models import TranslatedFieldsMixin
|
||||||
from utils.querysets import RelatedObjectsCountMixin
|
from utils.querysets import RelatedObjectsCountMixin
|
||||||
|
from utils.models import IntermediateGalleryModelMixin, GalleryModelMixin
|
||||||
|
|
||||||
|
|
||||||
# Mixins
|
# Mixins
|
||||||
|
|
@ -210,7 +211,7 @@ class AdvertorialQuerySet(models.QuerySet):
|
||||||
"""QuerySet for model Advertorial."""
|
"""QuerySet for model Advertorial."""
|
||||||
|
|
||||||
|
|
||||||
class Advertorial(ProjectBaseMixin):
|
class Advertorial(GalleryModelMixin, ProjectBaseMixin):
|
||||||
"""Guide advertorial model."""
|
"""Guide advertorial model."""
|
||||||
number_of_pages = models.PositiveIntegerField(
|
number_of_pages = models.PositiveIntegerField(
|
||||||
verbose_name=_('number of pages'),
|
verbose_name=_('number of pages'),
|
||||||
|
|
@ -222,6 +223,7 @@ class Advertorial(ProjectBaseMixin):
|
||||||
related_name='advertorial',
|
related_name='advertorial',
|
||||||
verbose_name=_('guide element'))
|
verbose_name=_('guide element'))
|
||||||
old_id = models.IntegerField(blank=True, null=True)
|
old_id = models.IntegerField(blank=True, null=True)
|
||||||
|
gallery = models.ManyToManyField('gallery.Image', through='AdvertorialGallery')
|
||||||
|
|
||||||
objects = AdvertorialQuerySet.as_manager()
|
objects = AdvertorialQuerySet.as_manager()
|
||||||
|
|
||||||
|
|
@ -231,6 +233,24 @@ class Advertorial(ProjectBaseMixin):
|
||||||
verbose_name_plural = _('advertorials')
|
verbose_name_plural = _('advertorials')
|
||||||
|
|
||||||
|
|
||||||
|
class AdvertorialGallery(IntermediateGalleryModelMixin):
|
||||||
|
"""Advertorial gallery model."""
|
||||||
|
advertorial = models.ForeignKey(Advertorial, null=True,
|
||||||
|
related_name='advertorial_gallery',
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
verbose_name=_('advertorial'))
|
||||||
|
image = models.ForeignKey('gallery.Image', null=True,
|
||||||
|
related_name='advertorial_gallery',
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
verbose_name=_('image'))
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
verbose_name = _('advertorial gallery')
|
||||||
|
verbose_name_plural = _('advertorial galleries')
|
||||||
|
unique_together = (('advertorial', 'image'), )
|
||||||
|
|
||||||
|
|
||||||
class GuideFilterQuerySet(models.QuerySet):
|
class GuideFilterQuerySet(models.QuerySet):
|
||||||
"""QuerySet for model GuideFilter."""
|
"""QuerySet for model GuideFilter."""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,18 @@
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
from collection.models import GuideElementSection, GuideElementSectionCategory, \
|
||||||
|
GuideWineColorSection, GuideElementType, GuideElement, \
|
||||||
|
Guide, Advertorial, AdvertorialGallery
|
||||||
from establishment.models import Establishment
|
from establishment.models import Establishment
|
||||||
from review.models import Review
|
from gallery.models import Image
|
||||||
from location.models import WineRegion, City
|
from location.models import WineRegion, City
|
||||||
from product.models import Product
|
from product.models import Product
|
||||||
|
from review.models import Review
|
||||||
from transfer.models import Guides, GuideFilters, GuideSections, GuideElements, \
|
from transfer.models import Guides, GuideFilters, GuideSections, GuideElements, \
|
||||||
GuideAds
|
GuideAds, LabelPhotos
|
||||||
from transfer.serializers.guide import GuideSerializer, GuideFilterSerializer
|
from transfer.serializers.guide import GuideSerializer, GuideFilterSerializer
|
||||||
from collection.models import GuideElementSection, GuideElementSectionCategory, \
|
|
||||||
GuideWineColorSection, GuideElementType, GuideElement, \
|
|
||||||
Guide, Advertorial
|
|
||||||
|
|
||||||
|
|
||||||
def transfer_guide():
|
def transfer_guide():
|
||||||
|
|
@ -285,6 +288,42 @@ def transfer_guide_element_advertorials():
|
||||||
print(f'COUNT OF CREATED OBJECTS: {len(objects_to_update)}')
|
print(f'COUNT OF CREATED OBJECTS: {len(objects_to_update)}')
|
||||||
|
|
||||||
|
|
||||||
|
def transfer_guide_element_advertorial_galleries():
|
||||||
|
"""Transfer galleries for Guide Advertorial model."""
|
||||||
|
def get_guide_element_advertorial(old_id: int):
|
||||||
|
if old_id:
|
||||||
|
qs = Advertorial.objects.filter(old_id=old_id)
|
||||||
|
legacy_qs = GuideAds.objects.filter(id=old_id)
|
||||||
|
if qs.exists() and legacy_qs.exists():
|
||||||
|
return qs.first()
|
||||||
|
elif legacy_qs.exists() and not qs.exists():
|
||||||
|
raise ValueError(f'Guide element advertorials was not transfer correctly - {old_id}.')
|
||||||
|
|
||||||
|
created_counter = 0
|
||||||
|
gallery_obj_exists_counter = 0
|
||||||
|
advertorial_galleries = LabelPhotos.objects.exclude(guide_ad__isnull=False) \
|
||||||
|
.values_list('guide_ad', 'attachment_suffix_url')
|
||||||
|
for guide_ad, attachment_suffix_url in tqdm(advertorial_galleries):
|
||||||
|
advertorial = get_guide_element_advertorial(guide_ad.id)
|
||||||
|
image, _ = Image.objects.get_or_create(image=attachment_suffix_url,
|
||||||
|
defaults={
|
||||||
|
'image': attachment_suffix_url,
|
||||||
|
'orientation': Image.HORIZONTAL,
|
||||||
|
'title': f'{advertorial.name} - '
|
||||||
|
f'{attachment_suffix_url}',
|
||||||
|
})
|
||||||
|
city_gallery, created = AdvertorialGallery.objects.get_or_create(image=image,
|
||||||
|
advertorial=advertorial,
|
||||||
|
is_main=True)
|
||||||
|
if created:
|
||||||
|
created_counter += 1
|
||||||
|
else:
|
||||||
|
gallery_obj_exists_counter += 1
|
||||||
|
|
||||||
|
print(f'Created: {created_counter}\n'
|
||||||
|
f'Already added: {gallery_obj_exists_counter}')
|
||||||
|
|
||||||
|
|
||||||
data_types = {
|
data_types = {
|
||||||
'guides': [
|
'guides': [
|
||||||
transfer_guide,
|
transfer_guide,
|
||||||
|
|
@ -306,6 +345,9 @@ data_types = {
|
||||||
],
|
],
|
||||||
'guide_element_advertorials': [
|
'guide_element_advertorials': [
|
||||||
transfer_guide_element_advertorials
|
transfer_guide_element_advertorials
|
||||||
|
],
|
||||||
|
'guide_element_advertorial_galleries': [
|
||||||
|
|
||||||
],
|
],
|
||||||
'guide_complete': [
|
'guide_complete': [
|
||||||
transfer_guide, # transfer guides from Guides
|
transfer_guide, # transfer guides from Guides
|
||||||
|
|
@ -315,5 +357,6 @@ data_types = {
|
||||||
transfer_guide_element_type, # partial transfer section types from GuideElements
|
transfer_guide_element_type, # partial transfer section types from GuideElements
|
||||||
transfer_guide_elements_bulk, # transfer result of GuideFilters from GuideElements
|
transfer_guide_elements_bulk, # transfer result of GuideFilters from GuideElements
|
||||||
transfer_guide_element_advertorials, # transfer advertorials that linked to GuideElements
|
transfer_guide_element_advertorials, # transfer advertorials that linked to GuideElements
|
||||||
|
transfer_guide_element_advertorial_galleries, # transfer advertorial galleries
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1222,3 +1222,19 @@ class Footers(MigrateMixin):
|
||||||
class Meta:
|
class Meta:
|
||||||
managed = False
|
managed = False
|
||||||
db_table = 'footers'
|
db_table = 'footers'
|
||||||
|
|
||||||
|
|
||||||
|
class LabelPhotos(MigrateMixin):
|
||||||
|
using = 'legacy'
|
||||||
|
|
||||||
|
guide_ad = models.ForeignKey(GuideAds, models.DO_NOTHING, blank=True, null=True)
|
||||||
|
attachment_file_name = models.CharField(max_length=255)
|
||||||
|
attachment_content_type = models.CharField(max_length=255)
|
||||||
|
attachment_file_size = models.IntegerField()
|
||||||
|
attachment_updated_at = models.DateTimeField()
|
||||||
|
attachment_suffix_url = models.DateTimeField()
|
||||||
|
geometries = models.CharField(max_length=1024)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'label_photos'
|
||||||
|
|
|
||||||
|
|
@ -361,6 +361,10 @@ class GMTokenGenerator(PasswordResetTokenGenerator):
|
||||||
class GalleryModelMixin(models.Model):
|
class GalleryModelMixin(models.Model):
|
||||||
"""Mixin for models that has gallery."""
|
"""Mixin for models that has gallery."""
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
abstract = True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def crop_gallery(self):
|
def crop_gallery(self):
|
||||||
if hasattr(self, 'gallery'):
|
if hasattr(self, 'gallery'):
|
||||||
|
|
@ -400,10 +404,6 @@ class GalleryModelMixin(models.Model):
|
||||||
)
|
)
|
||||||
return image_property
|
return image_property
|
||||||
|
|
||||||
class Meta:
|
|
||||||
"""Meta class."""
|
|
||||||
abstract = True
|
|
||||||
|
|
||||||
|
|
||||||
class IntermediateGalleryModelQuerySet(models.QuerySet):
|
class IntermediateGalleryModelQuerySet(models.QuerySet):
|
||||||
"""Extended QuerySet."""
|
"""Extended QuerySet."""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user