# -*- coding: utf-8 -*- import xlrd from django.core.management.base import BaseCommand from django.conf import settings from article.models import Article from import_xls.excel_settings import article_sett from django.db import IntegrityError NEWS_FILE = settings.MEDIA_ROOT+'/import/news.xls' class Command(BaseCommand): def handle(self, *args, **options): f = open(NEWS_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[2:]): published = row[4] if row[0] != '': # in first column ids try: object = Article.objects.language('ru').get(id=int(row[0])) object.type = Article.news object.save() print(object.type) continue except ValueError: object = Article(type=Article.news) object.translate('ru') except Article.DoesNotExist: object = Article(id= int(row[0])) object.translate('ru') existing += 1 else: # if id blank - its a new place object = Article(type=Article.news) object.translate('ru') for col_number, cell in enumerate(row): label = labels[col_number] setting = article_sett.get(label) if setting is None: continue field_name = setting['field'] func = setting.get('func') value = func(cell) setattr(object, field_name, value) object.publish_date = published try: object.save() except Exception, e: print(e)