You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.1 KiB
123 lines
4.1 KiB
# -*- coding: utf-8 -*-
|
|
import xlrd
|
|
from django.core.management.base import BaseCommand
|
|
from django.conf import settings
|
|
from exposition.models import Exposition
|
|
from import_xls.excel_settings import event_sett
|
|
from django.db import IntegrityError
|
|
from django.utils import translation
|
|
|
|
CHINA_FILE = settings.MEDIA_ROOT+'/import/expo_china_ru.xlsx'
|
|
GERMANY_FILE = settings.MEDIA_ROOT+'/import/expo_germany_ru.xlsx'
|
|
# 391 row not imported(same url)
|
|
ITALY_FILE = settings.MEDIA_ROOT+'/import/expo_italy_ru.xlsx'
|
|
# moscow 3 exps
|
|
F = settings.MEDIA_ROOT+'/import/exp.xlsx'
|
|
|
|
LA_FILE = settings.MEDIA_ROOT+'/import/expo_la.xlsx'
|
|
NA_EU_ASIA_FILE = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa.xls'
|
|
NA_EU_ASIA_FILE2 = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa_part2.xls'
|
|
RUSSIA_FILE = settings.MEDIA_ROOT+'/import/expo_russia.xls'
|
|
GEORGIA_FILE = settings.MEDIA_ROOT+'/import/georgia.xls'
|
|
|
|
|
|
class Command(BaseCommand):
|
|
def handle(self, *args, **options):
|
|
|
|
|
|
f = open(GEORGIA_FILE, 'r')
|
|
book = xlrd.open_workbook(file_contents=f.read())
|
|
|
|
sheet = book.sheet_by_index(0)
|
|
row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)]
|
|
labels = [label for label in row_list[0]]
|
|
existing = 0
|
|
|
|
|
|
for row_number, row in enumerate(row_list[1:]):
|
|
#print(row_number)
|
|
name = row[2]
|
|
|
|
if row[0] != '':
|
|
# in first column ids
|
|
|
|
try:
|
|
object = Exposition.objects.language('ru').get(id=int(row[0]))
|
|
existing += 1
|
|
except ValueError:
|
|
object = Exposition()
|
|
object.translate('ru')
|
|
|
|
|
|
except Exposition.DoesNotExist:
|
|
object = Exposition(id= int(row[0]))
|
|
object.translate('ru')
|
|
existing += 1
|
|
else:
|
|
# if id blank - its a new place
|
|
object = Exposition()
|
|
object.translate('ru')
|
|
"""
|
|
try:
|
|
object = Exposition.objects.language('ru').filter(translations__name=name)[0]
|
|
existing += 1
|
|
except IndexError:
|
|
pass
|
|
"""
|
|
|
|
|
|
|
|
methods = []
|
|
for col_number, cell in enumerate(row):
|
|
label = labels[col_number]
|
|
setting = event_sett.get(label)
|
|
if setting is None:
|
|
continue
|
|
if setting.get('method'):
|
|
if cell != "":
|
|
methods.append({'func': setting['func'], 'value': cell, 'purpose': setting.get('purpose')})
|
|
continue
|
|
|
|
field_name = setting['field']
|
|
func = setting.get('func')
|
|
|
|
if func is not None:
|
|
extra_value = setting.get('extra_values')
|
|
if extra_value is not None:
|
|
# if setting has extra value then
|
|
# it is some field like city, theme, tag
|
|
# that has relation and can be created
|
|
|
|
# in function we add language(need for relation fields)
|
|
# and extra value from object (like for city need country)
|
|
value = func(cell, 'ru', getattr(object, extra_value))
|
|
elif setting.get('bitfield'):
|
|
value = func(object, cell, setting['label'])
|
|
|
|
else:
|
|
value = func(cell)
|
|
if field_name == 'city':
|
|
pass
|
|
else:
|
|
setattr(object, field_name, value)
|
|
|
|
|
|
try:
|
|
object.save()
|
|
except IntegrityError:
|
|
continue
|
|
|
|
print('post save %s'% str(object))
|
|
|
|
|
|
for method in methods:
|
|
func = method['func']
|
|
if method.get('purpose'):
|
|
try:
|
|
func(object, method['value'], method['purpose'])
|
|
except:
|
|
continue
|
|
else:
|
|
func(object, method['value'])
|
|
|
|
print(existing)
|
|
|