[Python] idio[ma]ticità

Marco De Paoli depaolim a gmail.com
Mer 22 Apr 2015 13:58:59 CEST


Il giorno 21 aprile 2015 11:27, Marco De Paoli <depaolim a gmail.com> ha
scritto:


P.S. ... se posso posto lo snippet finale con anche la gestione delle FK
>

ecco qua:

@django.db.transaction.atomic

def load_from_xlsx(cls, rows):
    fs = {c.column: cls.XLSX_2_FIELDS.get(c.value) for c in rows[0]}
    cls.objects.all().delete()
    cls.objects.bulk_create([
        cls(**{fs[c.column].get_attname(): c.value for c in r if
fs[c.column]})
        for r in rows[1:]]
    )


Ed ecco un esempio d'uso:

wb = openpyxl.load_workbook("myfile.xlsx")
load_from_xlsx(MyModel, wb.active.rows)


L'unica altra cosa che serve è che MyModel abbia l'attributo XLSX_2_FIELDS
per stabilire la rimappatura tra: nomi delle colonne xlsx e nomi dei field

Ecco un gist con il codice completo di test cases
https://gist.github.com/depaolim/1dfd6e3d3789047c36b1

ciao,
Marco
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150422/10559adc/attachment.html>


Maggiori informazioni sulla lista Python