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'
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('''
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
a.collection_id,
a.establishment_id
from
(
select distinct
c.id,
c.id as collection_id,
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.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
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
union
select distinct
c.id,
c.id as collection_id,
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.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
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()
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)
print('COLLECT_ID: {}'.format(obj['collection_id']))
est = Establishment.objects.filter(old_id=obj['establishment_id'])
if est.exists():
inst = est.first()
collect = Collection.objects.filter(old_id=obj['collection_id'])
for c in collect:
inst.collections.add(c)
inst.save()

View File

@ -71,7 +71,7 @@ class RegionSerializer(serializers.ModelSerializer):
print(data)
if "subregion_code" in data and data["subregion_code"] is not None and data["subregion_code"].strip() != "":
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:
raise ValueError(f"Parent region error with {data}: {e}")