AlexProfi

save xml to models

Sep 29th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.58 KB | None | 0 0
  1. def fill_model_by_xml_fields(mdl, data):
  2.     model=mdl
  3.     relations = [rel for rel in model._meta.get_all_related_objects() if rel.related_model!=model]
  4.     if len(relations):
  5.         for relation in relations:
  6.             m = relation.related_model
  7.             fields=m._meta.fields
  8.             parent_elems_name = m._meta.verbose_name_plural
  9.             parent_elem_name = m._meta.verbose_name
  10.             parent_elems=[data]
  11.             if data.tag != parent_elem_name:
  12.                 parent_elems = data.findall('.//%s/%s' % (parent_elems_name, parent_elem_name))
  13.  
  14.             map_data={}
  15.             for parent_elem in parent_elems:
  16.                 for field in fields:
  17.                     if not field.auto_created and field.help_text!='':
  18.                         value = parent_elem.find('.//%s' % field.help_text).text
  19.                         if issubclass(field.__class__, DateTimeField):
  20.  
  21.                             try:
  22.                                 value=dateutil.parser.parse(value)
  23.                             except Exception as e:
  24.                                 print(e)
  25.                         map_data[field.name] = value
  26.  
  27.                 mdl, created = m.objects.update_or_create(**map_data)
  28.                 setattr(mdl,relation.remote_field.name,model)
  29.                 mdl.save()
  30.  
  31.         # TODO предварительно планируется ограничить кол-во связей один ко многим в модели до 1 для упродения структуры данных
  32.                 fill_model_by_xml_fields(mdl, parent_elem)
Add Comment
Please, Sign In to add comment