|
|
|
|
@ -4,55 +4,23 @@ import xlrd, xlwt |
|
|
|
|
from django.conf import settings |
|
|
|
|
from import_xls.excel_settings import import_settings |
|
|
|
|
|
|
|
|
|
INFLECT_FILE = settings.MEDIA_ROOT+'/import/themes_inflect.xls' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand): |
|
|
|
|
def handle(self, *args, **options): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f = open(settings.MEDIA_ROOT+'/import/tags2.xls', 'r') |
|
|
|
|
f = open(INFLECT_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)] |
|
|
|
|
# all field names in excel file (must be in second row) |
|
|
|
|
field_names = [name for name in row_list[1]] |
|
|
|
|
for row_number, row in enumerate(row_list): |
|
|
|
|
# go through all rows in file |
|
|
|
|
if row_number > 1: |
|
|
|
|
# first two fields are verbose name and name |
|
|
|
|
if row[0] != '': |
|
|
|
|
# in first column ids |
|
|
|
|
try: |
|
|
|
|
object = Tag.objects.language('en').get(id=int(row[0])) |
|
|
|
|
except: |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
for col_number, cell in enumerate(row): |
|
|
|
|
# go through row cells |
|
|
|
|
# field name current cell |
|
|
|
|
field_name = field_names[col_number] |
|
|
|
|
setting = import_settings.get(field_name) |
|
|
|
|
if setting is not None: |
|
|
|
|
# if setting exist for this 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, 'en', getattr(object, extra_value)) |
|
|
|
|
else: |
|
|
|
|
value = func(cell) |
|
|
|
|
if field_name != 'theme': |
|
|
|
|
setattr(object, field_name, value) |
|
|
|
|
else: |
|
|
|
|
setattr(object, field_name, value[0]) |
|
|
|
|
print('pre save %s'%str(object)) |
|
|
|
|
try: |
|
|
|
|
object.save() |
|
|
|
|
except: |
|
|
|
|
pass |
|
|
|
|
print('post save %s'%str(object)) |
|
|
|
|
for row_number, row in enumerate(row_list[2:]): |
|
|
|
|
id = int(row[0]) |
|
|
|
|
a = row[3] |
|
|
|
|
print a.encode('utf8') |
|
|
|
|
Theme.objects.filter(id=id).update(inflect=a) |