def importXML(xml): obj = xmltodict.parse(xml, process_namespaces=True) #pessoa = Pessoa.objects.create(nome=obj['CURRICULO-VITAE']['DADOS-GERAIS']['@NOME-COMPLETO']) pessoa = Pessoa() try: with transaction.atomic(): pessoa.nome = obj['CURRICULO-VITAE']['DADOS-GERAIS']['@NOME-COMPLETO'] pessoa.sexo = 'M' pessoa.data_nascimento = date(1977,3,3) pessoa.numero_documento = '07758079741' pessoa.email = '*****@*****.**' # Tratamento de país paises = Pais.objects.filter(Q(nome_pais=obj['CURRICULO-VITAE']['DADOS-GERAIS']['@PAIS-DE-NACIONALIDADE'])) if paises.exists(): print(paises[0]) pessoa.nacionalidade = paises[0] pessoa.save() # tratamento de abreviação abrevs = obj['CURRICULO-VITAE']['DADOS-GERAIS']['@NOME-EM-CITACOES-BIBLIOGRAFICAS'] if abrevs: first = True items = abrevs.split(';') print(items) for item in items: Abreviatura.objects.create(pessoa=pessoa, desc_abreviatura=item, flg_principal= first if 1 else 0) return pessoa except: return None
def save_docente(request, id=0, template_name='pessoa/docente_form.html'): if id > 0: docente = get_object_or_404(Docente, pk=id) pessoa = docente.pessoa else: docente = Docente() pessoa = Pessoa() # tramento para importar xml lates dict_abrevs = [] if request.method == 'POST' and "import_xml" in request.POST and bool( request.FILES.get('myfile', False)): myfile = request.FILES['myfile'] if myfile.name.endswith('.xml'): data = myfile.read() pessoa_xml = LattesService.import_xml_memory(data) request.session["docente_pessoa_xml"] = pessoa_xml else: pessoa_xml = "Erro" return redirect("docente_new") pessoa_xml = request.session.get("docente_pessoa_xml", None) if pessoa_xml: if pessoa_xml is not "Erro": messages.success( request, 'Currículo de(a), %s importado com sucesso.' % pessoa_xml["nome"]) LattesService.fill_pessoa(pessoa, pessoa_xml, dict_abrevs) request.session["docente_pessoa_xml"] = None else: messages.success( request, 'Arquivo não é XML. Apenas arquivos XML podem ser importados!') request.session["docente_pessoa_xml"] = None # FIM tramento para importar xml lates # Preparação dos forms pessoa_form = PessoaForm(request.POST or None, instance=pessoa) docente_form = DocenteForm(request.POST or None, instance=docente) AbreviaturaFormSet = inlineformset_factory(Pessoa, Abreviatura, form=AbreviaturaForm, extra=1) abreviatura_form = AbreviaturaFormSet(instance=pessoa) # inicializa o form com as abreviaturas do xml latters for subform, data in zip(abreviatura_form.forms, dict_abrevs): subform.initial = data if request.method == 'POST' and pessoa_form.is_valid( ) and docente_form.is_valid(): # transação with transaction.atomic(): pessoa = pessoa_form.save() docente = docente_form.save(False) docente.pessoa = pessoa docente.save() abreviatura_form = AbreviaturaFormSet(request.POST, instance=pessoa) print(abreviatura_form.is_valid()) if abreviatura_form.is_valid(): abreviatura_form.save() return redirect('docente_list') args = {} args.update(csrf(request)) args['pessoa_form'] = pessoa_form args['docente_form'] = docente_form args['abreviatura_form'] = abreviatura_form args['is_new'] = id <= 0 return render(request, template_name, args)