Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def fill_model_by_xml_fields(mdl, data):
- model=mdl
- relations = [rel for rel in model._meta.get_all_related_objects() if rel.related_model!=model]
- if len(relations):
- for relation in relations:
- m = relation.related_model
- fields=m._meta.fields
- parent_elems_name = m._meta.verbose_name_plural
- parent_elem_name = m._meta.verbose_name
- parent_elems=[data]
- if data.tag != parent_elem_name:
- parent_elems = data.findall('.//%s/%s' % (parent_elems_name, parent_elem_name))
- map_data={}
- for parent_elem in parent_elems:
- for field in fields:
- if not field.auto_created and field.help_text!='':
- value = parent_elem.find('.//%s' % field.help_text).text
- if issubclass(field.__class__, DateTimeField):
- try:
- value=dateutil.parser.parse(value)
- except Exception as e:
- print(e)
- map_data[field.name] = value
- mdl, created = m.objects.update_or_create(**map_data)
- setattr(mdl,relation.remote_field.name,model)
- mdl.save()
- # TODO предварительно планируется ограничить кол-во связей один ко многим в модели до 1 для упродения структуры данных
- fill_model_by_xml_fields(mdl, parent_elem)
Add Comment
Please, Sign In to add comment