fix guide element label photo

This commit is contained in:
Anatoly 2019-12-18 12:02:39 +03:00
parent 5d69f2a5e7
commit 54eee9565c
5 changed files with 84 additions and 58 deletions

View File

@ -0,0 +1,27 @@
# Generated by Django 2.2.7 on 2019-12-18 07:53
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('gallery', '0007_auto_20191211_1528'),
('collection', '0026_merge_20191217_1151'),
]
operations = [
migrations.RemoveField(
model_name='advertorial',
name='gallery',
),
migrations.AddField(
model_name='guideelement',
name='label_photo',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='gallery.Image', verbose_name='label photo'),
),
migrations.DeleteModel(
name='AdvertorialGallery',
),
]

View File

@ -227,7 +227,7 @@ class AdvertorialQuerySet(models.QuerySet):
"""QuerySet for model Advertorial."""
class Advertorial(GalleryModelMixin, ProjectBaseMixin):
class Advertorial(ProjectBaseMixin):
"""Guide advertorial model."""
number_of_pages = models.PositiveIntegerField(
verbose_name=_('number of pages'),
@ -239,7 +239,6 @@ class Advertorial(GalleryModelMixin, ProjectBaseMixin):
related_name='advertorial',
verbose_name=_('guide element'))
old_id = models.IntegerField(blank=True, null=True)
gallery = models.ManyToManyField('gallery.Image', through='AdvertorialGallery')
objects = AdvertorialQuerySet.as_manager()
@ -249,24 +248,6 @@ class Advertorial(GalleryModelMixin, ProjectBaseMixin):
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):
"""QuerySet for model GuideFilter."""
@ -411,6 +392,9 @@ class GuideElement(ProjectBaseMixin, MPTTModel):
parent = TreeForeignKey('self', on_delete=models.CASCADE,
null=True, blank=True,
related_name='children')
label_photo = models.ForeignKey('gallery.Image', on_delete=models.SET_NULL,
null=True, blank=True, default=None,
verbose_name=_('label photo'))
old_id = models.PositiveIntegerField(blank=True, null=True, default=None,
verbose_name=_('old id'))

View File

@ -4,7 +4,7 @@ from tqdm import tqdm
from collection.models import GuideElementSection, GuideElementSectionCategory, \
GuideWineColorSection, GuideElementType, GuideElement, \
Guide, Advertorial, AdvertorialGallery
Guide, Advertorial
from establishment.models import Establishment
from gallery.models import Image
from location.models import WineRegion, City
@ -13,6 +13,7 @@ from review.models import Review
from transfer.models import Guides, GuideFilters, GuideSections, GuideElements, \
GuideAds, LabelPhotos
from transfer.serializers.guide import GuideSerializer, GuideFilterSerializer
from django.db.models import Subquery
def transfer_guide():
@ -255,7 +256,7 @@ def transfer_guide_element_advertorials():
qs = GuideElement.objects.filter(old_id=old_id)
legacy_qs = GuideElements.objects.exclude(guide__isnull=True) \
.exclude(guide__title__icontains='test') \
.filter(id=guide_ad_node_id)
.filter(id=old_id)
if qs.exists() and legacy_qs.exists():
return qs.first()
elif legacy_qs.exists() and not qs.exists():
@ -288,40 +289,53 @@ def transfer_guide_element_advertorials():
print(f'COUNT OF CREATED OBJECTS: {len(objects_to_update)}')
def transfer_guide_element_advertorial_galleries():
def transfer_guide_element_label_photo():
"""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}.')
def get_guide_element(guide_ad):
legacy_guide_element_id = guide_ad.guide_ad_node.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
legacy_guide_element_qs = GuideElements.objects.filter(id=legacy_guide_element_id)
guide_element_qs = GuideElement.objects.filter(old_id=legacy_guide_element_id)
if guide_element_qs.exists() and legacy_guide_element_qs.exists():
return guide_element_qs.first()
else:
gallery_obj_exists_counter += 1
raise ValueError(f'Guide element was not transfer correctly - '
f'{legacy_guide_element_id}.')
print(f'Created: {created_counter}\n'
f'Already added: {gallery_obj_exists_counter}')
to_update = []
not_updated = 0
guide_element_label_photos = LabelPhotos.objects.exclude(guide_ad__isnull=True) \
.filter(guide_ad__type='GuideAdLabel') \
.distinct() \
.values_list('guide_ad', 'attachment_suffix_url')
for guide_ad_id, attachment_suffix_url in tqdm(guide_element_label_photos):
legacy_guide_element_ids = Subquery(
GuideElements.objects.exclude(guide__isnull=True)
.exclude(guide__title__icontains='test')
.values_list('id', flat=True)
)
legacy_guide_ad_qs = GuideAds.objects.filter(id=guide_ad_id,
guide_ad_node_id__in=legacy_guide_element_ids)
if legacy_guide_ad_qs.exists():
guide_element = get_guide_element(legacy_guide_ad_qs.first())
if guide_element:
image, _ = Image.objects.get_or_create(image=attachment_suffix_url,
defaults={
'image': attachment_suffix_url,
'orientation': Image.HORIZONTAL,
'title': f'{guide_element.__str__()} '
f'{guide_element.id} - '
f'{attachment_suffix_url}'})
if not guide_element.label_photo:
guide_element.label_photo = image
to_update.append(guide_element)
else:
not_updated += 1
GuideElement.objects.bulk_update(to_update, ['label_photo', ])
print(f'Added label photo to {len(to_update)} objects\n'
f'Objects {not_updated} not updated')
data_types = {
@ -344,10 +358,10 @@ data_types = {
transfer_guide_elements_bulk,
],
'guide_element_advertorials': [
transfer_guide_element_advertorials
transfer_guide_element_advertorials,
],
'guide_element_advertorial_galleries': [
'guide_element_label_photo': [
transfer_guide_element_label_photo,
],
'guide_complete': [
transfer_guide, # transfer guides from Guides
@ -357,6 +371,6 @@ data_types = {
transfer_guide_element_type, # partial transfer section types 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_advertorial_galleries, # transfer advertorial galleries
transfer_guide_element_label_photo, # transfer guide element label photos
]
}

View File

@ -48,6 +48,7 @@ class Command(BaseCommand):
'guide_element_types',
'guide_elements_bulk',
'guide_element_advertorials',
'guide_element_label_photo',
'guide_complete',
'languages', # №4 - перенос языков
]

View File

@ -343,7 +343,7 @@ class GuideAds(MigrateMixin):
nb_right_pages = models.IntegerField(blank=True, null=True)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
guide_ad_node_id = models.IntegerField(blank=True, null=True)
guide_ad_node = models.ForeignKey('GuideElements', on_delete=models.DO_NOTHING, blank=True, null=True)
type = models.CharField(max_length=255, blank=True, null=True)
class Meta:
@ -1232,7 +1232,7 @@ class LabelPhotos(MigrateMixin):
attachment_content_type = models.CharField(max_length=255)
attachment_file_size = models.IntegerField()
attachment_updated_at = models.DateTimeField()
attachment_suffix_url = models.DateTimeField()
attachment_suffix_url = models.CharField(max_length=255)
geometries = models.CharField(max_length=1024)
class Meta: