def process_ware(self, ware): attr_res = { 1: lambda i,q: setattr(i, 'weight', q), 2: lambda i,q: setattr(i, 'units', q), 3: lambda i,q: setattr(i, 'pack', q) } tags = [t['title'] for t in self.iterate_qs("SELECT t.title FROM shop_ware_tags AS wt LEFT JOIN shop_tag AS t ON t.id=wt.tag_id WHERE wt.ware_id=%d" % ware['id'])] winstance = Ware.objects.create( category=self.main_category, brand=self.unknown_brand, title=ware['title'], enabled=True ) variants = self.iterate_qs("SELECT id,price,articul FROM shop_variant WHERE ware_id=%d" % ware['id']) for variant in variants: vinstance = Variant(price=variant['price'], articul=variant['articul'], ware=winstance) attrs = self.iterate_qs("SELECT value_text,schema_id FROM shop_attribute WHERE entity_id=%d" % variant['id']) for attr in attrs: attr_res[attr['schema_id']](vinstance, attr['value_text']) vinstance.save() winstance.tags.add(*tags)
def handle(self, *args, **kwargs): #fh = urllib2.urlopen(self.dbf_url) #tf = tempfile.NamedTemporaryFile() #tf.write(fh.read()) #fh.close() unknown_brand, _ = Brand.objects.get_or_create(title=u'Неизвестный') unknown_category, _ = Category.objects.get_or_create(title=u'Неразобранное', parent=None) coeff = Entry.get('shop.discount.markup') print coeff return with transaction.commit_on_success(): dbf = ydbf.open(tf, encoding='cp866') for record in dbf: created = False try: variant = Variant.objects.select_related().get(articul=record['COD_ARTIC']) except ObjectDoesNotExist, e: ware = Ware.objects.create( enabled=False, title=record['NAME_ARTIC'], category=unknown_category, brand=unknown_brand ) variant = Variant() variant.ware = ware variant.articul = record['COD_ARTIC'] created = True try: variant.original_title = record['NAME_ARTIC'] variant.store_qty = int(record['REZ_KOLCH']) variant.base_price = record['CENA_ARTIC'] variant.pack = int(record['EDN_V_UPAK']) variant.units = record['EDIN_IZMER'] if variant.fix_price: raise Exception, u'Цена для товара зафиксирована, цена из базы -- %s' % record['CENA_ARTIC'] else: variant.price = coeff*variant['base_price'] variant.save() if created: raise Exception, u'Создан новый товар и вариант -- %s' % record['NAME_ARTIC'] except Exception, e: print unicode(e) ImportIssue.objects.create( variant=variant, description=unicode(e) )