gault-millau/apps/partner/transfer_data.py
2020-01-28 21:27:45 +03:00

54 lines
1.9 KiB
Python

from pprint import pprint
from establishment.models import Establishment
from partner.models import Partner, PartnerToEstablishment
from transfer.models import EstablishmentBacklinks
from transfer.serializers.partner import PartnerSerializer
def transfer_partner():
"""
Transfer data to Partner model only after transfer Establishment
"""
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',
'partnership_name',
'partnership_icon',
'backlink_url',
'created_at',
'type',
'starting_date',
'expiry_date',
'price_per_month',
)
serialized_data = PartnerSerializer(data=list(queryset), many=True)
if serialized_data.is_valid():
Partner.objects.all().delete() # TODO: закоментить, если требуется сохранить старые записи
serialized_data.save()
else:
pprint(f"Partner serializer errors: {serialized_data.errors}")
# here we manually delete duplicates
partners_to_remove_ids = []
for partner_establishment_proxy in PartnerToEstablishment.objects.all():
related_partner = partner_establishment_proxy.partner
actual_partner = Partner.objects.filter(type=related_partner.type,
url=related_partner.url,
name=related_partner.name).first() # exists for sure
if related_partner.pk != actual_partner.pk:
partners_to_remove_ids.append(related_partner.pk)
partner_establishment_proxy.partner = actual_partner
partner_establishment_proxy.save()
Partner.objects.filter(id__in=partners_to_remove_ids).delete()
data_types = {
"partner": [transfer_partner]
}