This commit is contained in:
Виктор Гладких 2019-11-01 10:16:05 +03:00
parent 1abe280ef7
commit 54f2290bbd
2 changed files with 129 additions and 67 deletions

View File

@ -10,93 +10,155 @@ class Command(BaseCommand):
help = 'Import collection' help = 'Import collection'
def handle(self, *args, **kwargs): def handle(self, *args, **kwargs):
# raw_qs = Collections.objects.raw('''
# select
# distinct
# a.id,
# a.collection_id,
# -- a.establishment_id,
# a.title,
# a.tag_name,
# a.slug,
# -- a.attachment_file_name,
# -- a.attachment_content_type,
# -- a.attachment_file_size,
# -- a.attachment_suffix_url,
# -- active as is_publish,
# a.country_code,
# -- a.geometries,
# a.description,
# min(a.start) AS start
# from
# (
# select distinct
# c.id,
# c.id as collection_id,
# m.establishment_id,
# c.title, c.tag_name,
# c.slug, c.attachment_file_name,
# c.attachment_content_type, c.attachment_file_size,
# c.attachment_suffix_url,
# active,
# s.country_code_2 as country_code,
# c.geometries,
# c.title as description,
# m.created_at as start
# from collections as c
# join metadata m on m.value = c.tag_name
# join establishments e on e.id = m.establishment_id
# join sites s on s.id = c.site_id
# where m.`key` = 'collection'
#
# union
#
# select distinct
# c.id,
# c.id as collection_id,
# m.establishment_id,
# c.title, c.tag_name,
# c.slug, c.attachment_file_name,
# c.attachment_content_type, c.attachment_file_size,
# c.attachment_suffix_url,
# active,
# s.country_code_2 as country_code,
# c.geometries,
# c.title as description,
# m.created_at as start
# from collections as c
# join metadata m on m.value = c.slug
# join establishments e on e.id = m.establishment_id
# join sites s on s.id = c.site_id
# where m.`key` = 'collection'
# ) a
# group by
# a.id,
# a.collection_id,
# -- a.establishment_id,
# a.title,
# a.tag_name,
# a.slug,
# -- a.attachment_file_name,
# -- a.attachment_content_type,
# -- a.attachment_file_size,
# -- a.attachment_suffix_url,
# -- active as is_publish,
# a.country_code,
# a.description
# ''')
# objects = []
# queryset = [vars(query) for query in raw_qs]
# for obj in queryset:
# # establishment = Establishment.objects.filter(old_id=obj['establishment_id']).first()
# lang = Language.objects.filter(locale=obj['country_code'])
# country = Country.objects.filter(languages__in=lang).first()
# if country:
# objects.append(
# Collection(name={"en-GB": obj['title']}, collection_type=Collection.ORDINARY,
# country=country,
# description=obj['description'],
# slug=obj['slug'], old_id=obj['collection_id'],
# start=obj['start']
# )
# )
# Collection.objects.bulk_create(objects)
raw_qs = Collections.objects.raw(''' raw_qs = Collections.objects.raw('''
select select
distinct distinct
a.id, a.id,
a.collection_id, a.collection_id,
-- a.establishment_id, a.establishment_id
a.title, from
a.tag_name,
a.slug,
-- a.attachment_file_name,
-- a.attachment_content_type,
-- a.attachment_file_size,
-- a.attachment_suffix_url,
-- active as is_publish,
a.country_code,
-- a.geometries,
a.description,
min(a.start) AS start
from
( (
select distinct select distinct
c.id, c.id,
c.id as collection_id, c.id as collection_id,
m.establishment_id, m.establishment_id,
c.title, c.tag_name, c.title, c.tag_name,
c.slug, c.attachment_file_name, c.slug, c.attachment_file_name,
c.attachment_content_type, c.attachment_file_size, c.attachment_content_type, c.attachment_file_size,
c.attachment_suffix_url, c.attachment_suffix_url,
active, active,
s.country_code_2 as country_code, s.country_code_2 as country_code,
c.geometries, c.geometries,
c.title as description, c.title as description,
m.created_at as start m.created_at as start
from collections as c from collections as c
join metadata m on m.value = c.tag_name join metadata m on m.value = c.tag_name
join establishments e on e.id = m.establishment_id join establishments e on e.id = m.establishment_id
join sites s on s.id = c.site_id join sites s on s.id = c.site_id
where m.`key` = 'collection' where m.`key` = 'collection'
union union
select distinct select distinct
c.id, c.id,
c.id as collection_id, c.id as collection_id,
m.establishment_id, m.establishment_id,
c.title, c.tag_name, c.title, c.tag_name,
c.slug, c.attachment_file_name, c.slug, c.attachment_file_name,
c.attachment_content_type, c.attachment_file_size, c.attachment_content_type, c.attachment_file_size,
c.attachment_suffix_url, c.attachment_suffix_url,
active, active,
s.country_code_2 as country_code, s.country_code_2 as country_code,
c.geometries, c.geometries,
c.title as description, c.title as description,
m.created_at as start m.created_at as start
from collections as c from collections as c
join metadata m on m.value = c.slug join metadata m on m.value = c.slug
join establishments e on e.id = m.establishment_id join establishments e on e.id = m.establishment_id
join sites s on s.id = c.site_id join sites s on s.id = c.site_id
where m.`key` = 'collection' where m.`key` = 'collection'
) a ) a
group by ''')
a.id,
a.collection_id,
-- a.establishment_id,
a.title,
a.tag_name,
a.slug,
-- a.attachment_file_name,
-- a.attachment_content_type,
-- a.attachment_file_size,
-- a.attachment_suffix_url,
-- active as is_publish,
a.country_code,
a.description
''')
objects = []
queryset = [vars(query) for query in raw_qs] queryset = [vars(query) for query in raw_qs]
for obj in queryset: for obj in queryset:
# establishment = Establishment.objects.filter(old_id=obj['establishment_id']).first() print('COLLECT_ID: {}'.format(obj['collection_id']))
lang = Language.objects.filter(locale=obj['country_code']) est = Establishment.objects.filter(old_id=obj['establishment_id'])
country = Country.objects.filter(languages__in=lang).first() if est.exists():
objects.append( inst = est.first()
Collection(name={"en-GB":obj['title']}, collection_type=Collection.ORDINARY, collect = Collection.objects.filter(old_id=obj['collection_id'])
country=country, for c in collect:
description=obj['description'], inst.collections.add(c)
slug=obj['slug'], old_id=obj['collection_id'], inst.save()
start=obj['start']
)
)
Collection.objects.bulk_create(objects)

View File

@ -71,7 +71,7 @@ class RegionSerializer(serializers.ModelSerializer):
print(data) print(data)
if "subregion_code" in data and data["subregion_code"] is not None and data["subregion_code"].strip() != "": if "subregion_code" in data and data["subregion_code"] is not None and data["subregion_code"].strip() != "":
try: try:
parent_region = Region.objects.get(code=str(data['region_code'])) parent_region = Region.objects.filter(code=str(data['region_code'])).first()
except Exception as e: except Exception as e:
raise ValueError(f"Parent region error with {data}: {e}") raise ValueError(f"Parent region error with {data}: {e}")