From e6a143f6ea59225e27734852f5530898f5aaed7a Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 21 Nov 2019 12:29:55 +0300 Subject: [PATCH 1/5] partner model --- apps/partner/admin.py | 1 + .../migrations/0003_auto_20191121_0929.py | 46 +++++++++++++++++++ apps/partner/models.py | 20 ++++++++ 3 files changed, 67 insertions(+) create mode 100644 apps/partner/migrations/0003_auto_20191121_0929.py diff --git a/apps/partner/admin.py b/apps/partner/admin.py index f2973f75..9161837b 100644 --- a/apps/partner/admin.py +++ b/apps/partner/admin.py @@ -6,3 +6,4 @@ from partner import models @admin.register(models.Partner) class PartnerModelAdmin(admin.ModelAdmin): """Model admin for Partner model.""" + raw_id_fields = ('establishment',) diff --git a/apps/partner/migrations/0003_auto_20191121_0929.py b/apps/partner/migrations/0003_auto_20191121_0929.py new file mode 100644 index 00000000..526e14ce --- /dev/null +++ b/apps/partner/migrations/0003_auto_20191121_0929.py @@ -0,0 +1,46 @@ +# Generated by Django 2.2.7 on 2019-11-21 09:29 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0065_establishment_purchased_products'), + ('partner', '0002_auto_20191101_0939'), + ] + + operations = [ + migrations.AddField( + model_name='partner', + name='establishment', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='partners', to='establishment.Establishment', verbose_name='Establishment'), + preserve_default=False, + ), + migrations.AddField( + model_name='partner', + name='expiry_date', + field=models.DateField(blank=True, null=True, verbose_name='expiry date'), + ), + migrations.AddField( + model_name='partner', + name='old_id', + field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='old id'), + ), + migrations.AddField( + model_name='partner', + name='price_per_month', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='price per month'), + ), + migrations.AddField( + model_name='partner', + name='starting_date', + field=models.DateField(blank=True, null=True, verbose_name='starting date'), + ), + migrations.AddField( + model_name='partner', + name='type', + field=models.PositiveSmallIntegerField(choices=[(0, 'Partner'), (1, 'Sponsor')], default=0), + ), + ] diff --git a/apps/partner/models.py b/apps/partner/models.py index 1eb70845..61d13023 100644 --- a/apps/partner/models.py +++ b/apps/partner/models.py @@ -1,13 +1,33 @@ from django.db import models from django.utils.translation import gettext_lazy as _ +from establishment.models import Establishment from utils.models import ImageMixin, ProjectBaseMixin class Partner(ProjectBaseMixin): """Partner model.""" + + PARTNER = 0 + SPONSOR = 1 + MODEL_TYPES = ( + (PARTNER, _('Partner')), + (SPONSOR, _('Sponsor')), + ) + + old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) url = models.URLField(verbose_name=_('Partner URL')) image = models.URLField(verbose_name=_('Partner image URL'), null=True) + establishment = models.ForeignKey( + Establishment, + verbose_name=_('Establishment'), + related_name='partners', + on_delete=models.CASCADE, + ) + type = models.PositiveSmallIntegerField(choices=MODEL_TYPES, default=PARTNER) + starting_date = models.DateField(_('starting date'), blank=True, null=True) + expiry_date = models.DateField(_('expiry date'), blank=True, null=True) + price_per_month = models.DecimalField(_('price per month'), max_digits=10, decimal_places=2, blank=True, null=True) class Meta: verbose_name = _('partner') From 3f164459a7d9ce59032c5ae50c3d33e87f2b1924 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Thu, 21 Nov 2019 12:37:05 +0300 Subject: [PATCH 2/5] added transfer for filling city gallery --- apps/location/transfer_data.py | 41 ++++++++++++++++++- apps/transfer/management/commands/transfer.py | 1 + apps/transfer/models.py | 2 +- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/apps/location/transfer_data.py b/apps/location/transfer_data.py index 0d90461a..658d2d20 100644 --- a/apps/location/transfer_data.py +++ b/apps/location/transfer_data.py @@ -1,8 +1,8 @@ from transfer.serializers import location as location_serializers from transfer import models as transfer_models -from location.models import Country +from location.models import Country, CityGallery, City +from gallery.models import Image from pprint import pprint - from requests import get @@ -179,6 +179,42 @@ def update_flags(): query.save() +def transfer_city_gallery(): + created_counter = 0 + cities_not_exists = {} + gallery_obj_exists_counter = 0 + + city_gallery = transfer_models.CityPhotos.objects.exclude(city__isnull=True) \ + .exclude(city__country_code_2__isnull=True) \ + .exclude(city__country_code_2__iexact='') \ + .exclude(city__region_code__isnull=True) \ + .exclude(city__region_code__iexact='') \ + .values_list('city_id', 'attachment_suffix_url') + for old_city_id, image_suffix_url in city_gallery: + city = City.objects.filter(old_id=old_city_id) + if city.exists(): + city = city.first() + image, _ = Image.objects.get_or_create(image=image_suffix_url, + defaults={ + 'image': image_suffix_url, + 'orientation': Image.HORIZONTAL, + 'title': f'{city.name} - {image_suffix_url}', + }) + city_gallery, created = CityGallery.objects.get_or_create(image=image, + city=city, + is_main=True) + if created: + created_counter += 1 + else: + gallery_obj_exists_counter += 1 + else: + cities_not_exists.update({'city_old_id': old_city_id}) + + print(f'Created: {created_counter}\n' + f'City not exists: {cities_not_exists}\n' + f'Already added: {gallery_obj_exists_counter}') + + data_types = { "dictionaries": [ transfer_countries, @@ -192,4 +228,5 @@ data_types = { "update_country_flag": [ update_flags ], + "fill_city_gallery": [transfer_city_gallery] } diff --git a/apps/transfer/management/commands/transfer.py b/apps/transfer/management/commands/transfer.py index 9126856f..2d0ce399 100644 --- a/apps/transfer/management/commands/transfer.py +++ b/apps/transfer/management/commands/transfer.py @@ -40,6 +40,7 @@ class Command(BaseCommand): 'product_review', 'newsletter_subscriber', # подписчики на рассылку - переносить после переноса пользователей №1 'purchased_plaques', # №6 - перенос купленных тарелок + 'fill_city_gallery', # №3 - перенос галереи городов ] def handle(self, *args, **options): diff --git a/apps/transfer/models.py b/apps/transfer/models.py index f4a1a800..a8190879 100644 --- a/apps/transfer/models.py +++ b/apps/transfer/models.py @@ -217,10 +217,10 @@ class CityNames(MigrateMixin): class CityPhotos(MigrateMixin): using = 'legacy' - # city_id = models.IntegerField(blank=True, null=True) city = models.ForeignKey(Cities, models.DO_NOTHING, blank=True, null=True) attachment_file_name = models.CharField(max_length=255, blank=True, null=True) attachment_content_type = models.CharField(max_length=255, blank=True, null=True) + attachment_suffix_url = models.CharField(max_length=255) geometries = models.CharField(max_length=1024, blank=True, null=True) attachment_file_size = models.IntegerField(blank=True, null=True) attachment_updated_at = models.DateTimeField(blank=True, null=True) From d9b88f7ef96ef013611c9d0608f13229ed305dc5 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 21 Nov 2019 13:32:50 +0300 Subject: [PATCH 3/5] partner name field --- apps/partner/migrations/0004_partner_name.py | 18 ++++++++++++++++++ apps/partner/models.py | 1 + 2 files changed, 19 insertions(+) create mode 100644 apps/partner/migrations/0004_partner_name.py diff --git a/apps/partner/migrations/0004_partner_name.py b/apps/partner/migrations/0004_partner_name.py new file mode 100644 index 00000000..ef9ac8e8 --- /dev/null +++ b/apps/partner/migrations/0004_partner_name.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.7 on 2019-11-21 10:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('partner', '0003_auto_20191121_0929'), + ] + + operations = [ + migrations.AddField( + model_name='partner', + name='name', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='name'), + ), + ] diff --git a/apps/partner/models.py b/apps/partner/models.py index 61d13023..c4af1de5 100644 --- a/apps/partner/models.py +++ b/apps/partner/models.py @@ -16,6 +16,7 @@ class Partner(ProjectBaseMixin): ) old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) + name = models.CharField(_('name'), max_length=255, blank=True, null=True) url = models.URLField(verbose_name=_('Partner URL')) image = models.URLField(verbose_name=_('Partner image URL'), null=True) establishment = models.ForeignKey( From a6bfb3ea6b49ed28c66afae2e5d54ab53e6d226a Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 21 Nov 2019 13:47:37 +0300 Subject: [PATCH 4/5] partner migrations --- ...121_0929.py => 0003_auto_20191121_1045.py} | 10 +++++++--- .../migrations/0004_auto_20191121_1045.py | 19 +++++++++++++++++++ apps/partner/migrations/0004_partner_name.py | 18 ------------------ apps/partner/transfer_data.py | 16 ++++++++++++++-- 4 files changed, 40 insertions(+), 23 deletions(-) rename apps/partner/migrations/{0003_auto_20191121_0929.py => 0003_auto_20191121_1045.py} (76%) create mode 100644 apps/partner/migrations/0004_auto_20191121_1045.py delete mode 100644 apps/partner/migrations/0004_partner_name.py diff --git a/apps/partner/migrations/0003_auto_20191121_0929.py b/apps/partner/migrations/0003_auto_20191121_1045.py similarity index 76% rename from apps/partner/migrations/0003_auto_20191121_0929.py rename to apps/partner/migrations/0003_auto_20191121_1045.py index 526e14ce..6d548091 100644 --- a/apps/partner/migrations/0003_auto_20191121_0929.py +++ b/apps/partner/migrations/0003_auto_20191121_1045.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.7 on 2019-11-21 09:29 +# Generated by Django 2.2.7 on 2019-11-21 10:45 from django.db import migrations, models import django.db.models.deletion @@ -15,14 +15,18 @@ class Migration(migrations.Migration): migrations.AddField( model_name='partner', name='establishment', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='partners', to='establishment.Establishment', verbose_name='Establishment'), - preserve_default=False, + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='partners', to='establishment.Establishment', verbose_name='Establishment'), ), migrations.AddField( model_name='partner', name='expiry_date', field=models.DateField(blank=True, null=True, verbose_name='expiry date'), ), + migrations.AddField( + model_name='partner', + name='name', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='name'), + ), migrations.AddField( model_name='partner', name='old_id', diff --git a/apps/partner/migrations/0004_auto_20191121_1045.py b/apps/partner/migrations/0004_auto_20191121_1045.py new file mode 100644 index 00000000..1906a8c0 --- /dev/null +++ b/apps/partner/migrations/0004_auto_20191121_1045.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.7 on 2019-11-21 10:45 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('partner', '0003_auto_20191121_1045'), + ] + + operations = [ + migrations.AlterField( + model_name='partner', + name='establishment', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='partners', to='establishment.Establishment', verbose_name='Establishment'), + ), + ] diff --git a/apps/partner/migrations/0004_partner_name.py b/apps/partner/migrations/0004_partner_name.py deleted file mode 100644 index ef9ac8e8..00000000 --- a/apps/partner/migrations/0004_partner_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.7 on 2019-11-21 10:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('partner', '0003_auto_20191121_0929'), - ] - - operations = [ - migrations.AddField( - model_name='partner', - name='name', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='name'), - ), - ] diff --git a/apps/partner/transfer_data.py b/apps/partner/transfer_data.py index e3219838..f373427a 100644 --- a/apps/partner/transfer_data.py +++ b/apps/partner/transfer_data.py @@ -1,11 +1,23 @@ -from django.db.models import Value, IntegerField, F from pprint import pprint + +from establishment.models import Establishment from transfer.models import EstablishmentBacklinks from transfer.serializers.partner import PartnerSerializer def transfer_partner(): - queryset = EstablishmentBacklinks.objects.filter(type="Partner") + establishments = Establishment.objects.filter(old_id__isnull=False).values_list('old_id', flat=True) + queryset = EstablishmentBacklinks.objects.filter( + establishment_id__in=list(establishments), + ).values( + 'id', + 'establishment_id', + # 'aasm_state', + # 'created_at', + # 'establishment_id', + # 'mark', + # 'vintage', + ) # queryset = EstablishmentBacklinks.objects.all() # Partner and Sponsor From 9156d9cc35e5d9e13bd7c3c8239f412b0c3ae8a5 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 21 Nov 2019 14:00:17 +0300 Subject: [PATCH 5/5] fix partner migrations --- ...121_1045.py => 0003_auto_20191121_1059.py} | 2 +- .../migrations/0004_auto_20191121_1045.py | 19 --------- apps/partner/models.py | 2 + apps/partner/transfer_data.py | 19 ++++----- apps/transfer/serializers/partner.py | 39 ++++++++++--------- 5 files changed, 33 insertions(+), 48 deletions(-) rename apps/partner/migrations/{0003_auto_20191121_1045.py => 0003_auto_20191121_1059.py} (97%) delete mode 100644 apps/partner/migrations/0004_auto_20191121_1045.py diff --git a/apps/partner/migrations/0003_auto_20191121_1045.py b/apps/partner/migrations/0003_auto_20191121_1059.py similarity index 97% rename from apps/partner/migrations/0003_auto_20191121_1045.py rename to apps/partner/migrations/0003_auto_20191121_1059.py index 6d548091..c2e98fbe 100644 --- a/apps/partner/migrations/0003_auto_20191121_1045.py +++ b/apps/partner/migrations/0003_auto_20191121_1059.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.7 on 2019-11-21 10:45 +# Generated by Django 2.2.7 on 2019-11-21 10:59 from django.db import migrations, models import django.db.models.deletion diff --git a/apps/partner/migrations/0004_auto_20191121_1045.py b/apps/partner/migrations/0004_auto_20191121_1045.py deleted file mode 100644 index 1906a8c0..00000000 --- a/apps/partner/migrations/0004_auto_20191121_1045.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.7 on 2019-11-21 10:45 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('partner', '0003_auto_20191121_1045'), - ] - - operations = [ - migrations.AlterField( - model_name='partner', - name='establishment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='partners', to='establishment.Establishment', verbose_name='Establishment'), - ), - ] diff --git a/apps/partner/models.py b/apps/partner/models.py index c4af1de5..5c5766c8 100644 --- a/apps/partner/models.py +++ b/apps/partner/models.py @@ -24,6 +24,8 @@ class Partner(ProjectBaseMixin): verbose_name=_('Establishment'), related_name='partners', on_delete=models.CASCADE, + blank=True, + null=True, ) type = models.PositiveSmallIntegerField(choices=MODEL_TYPES, default=PARTNER) starting_date = models.DateField(_('starting date'), blank=True, null=True) diff --git a/apps/partner/transfer_data.py b/apps/partner/transfer_data.py index f373427a..868345a8 100644 --- a/apps/partner/transfer_data.py +++ b/apps/partner/transfer_data.py @@ -12,20 +12,21 @@ def transfer_partner(): ).values( 'id', 'establishment_id', - # 'aasm_state', - # 'created_at', - # 'establishment_id', - # 'mark', - # 'vintage', + 'partnership_name', + 'partnership_icon', + 'backlink_url', + 'created_at', + 'type', + 'starting_date', + 'expiry_date', + 'price_per_month', ) - # queryset = EstablishmentBacklinks.objects.all() # Partner and Sponsor - - serialized_data = PartnerSerializer(data=list(queryset.values()), many=True) + serialized_data = PartnerSerializer(data=list(queryset), many=True) if serialized_data.is_valid(): serialized_data.save() else: - pprint(f"News serializer errors: {serialized_data.errors}") + pprint(f"Partner serializer errors: {serialized_data.errors}") data_types = { diff --git a/apps/transfer/serializers/partner.py b/apps/transfer/serializers/partner.py index 7de61486..69cf308e 100644 --- a/apps/transfer/serializers/partner.py +++ b/apps/transfer/serializers/partner.py @@ -2,27 +2,28 @@ from rest_framework import serializers from partner.models import Partner -class PartnerSerializer(serializers.ModelSerializer): - backlink_url = serializers.CharField(source="url") - partnership_icon = serializers.CharField() - partnership_name = serializers.CharField() +class PartnerSerializer(serializers.Serializer): + pass + # 'id', + # 'establishment_id', + # 'partnership_name', + # 'partnership_icon', + # 'backlink_url', + # 'created_at', + # 'type', + # 'starting_date', + # 'expiry_date', + # 'price_per_month', - class Meta: - model = Partner - fields = ( - "backlink_url", - "partnership_icon", - "partnership_name" - ) - def validate(self, data): - data["image"] = partnership_to_image_url.get(data["partnership_name"]).get(data["partnership_icon"]) - data.pop("partnership_name") - data.pop("partnership_icon") - return data - - def create(self, validated_data): - return Partner.objects.create(**validated_data) + # def validate(self, data): + # data["image"] = partnership_to_image_url.get(data["partnership_name"]).get(data["partnership_icon"]) + # data.pop("partnership_name") + # data.pop("partnership_icon") + # return data + # + # def create(self, validated_data): + # return Partner.objects.create(**validated_data) partnership_to_image_url = {