Ho bisogno che l'interfaccia di Django Admin accetti gli upload di amministratore dei file Excel in cui i dati in ogni file Excel vengono inseriti nei miei modelli di database. Come posso visualizzare un pulsante "Upload" su una pagina di amministrazione del modello Django, in cui il clic sul pulsante chiede all'amministratore di scegliere un file .xls
, i cui dati vengono quindi aggiunti al database una volta completato il caricamento?Importare dati excel in modelli tramite admin django
risposta
Non sono sicuro del lato Django delle cose, ma è possibile utilizzare xlrd per leggere e manipolare i file di Excel. C'è un PDF gratuito che spiega questo chiamato Working with Excel files in Python
Ho fatto questo, ma ho appena impostato una semplice visualizzazione con un caricamento di file (in realtà questo ha più senso che aggiungerlo direttamente in una pagina di amministrazione Django, come una modifica page = un'istanza di modello e presumo che il tuo excel contenga più modelli).
in forms.py, un semplice modulo con un campo di caricamento file
class ImportExcelForm(forms.Form):
file = forms.FileField(label= "Choose excel to upload")
in views.py, al fine di elaborare il caricamento
def test_flowcell(request):
c = RequestContext(request, {'other_context':'details here'})
if request.method == 'POST': # If the form has been submitted...
form = ImportExcelForm(request.POST, request.FILES) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
excel_parser= ExcelParser()
success, log = excel_parser.read_excel(request.FILES['file'])
if success:
return redirect(reverse('admin:index') + "pages/flowcell_good/") ## redirects to aliquot page ordered by the most recent
else:
errors = '* Problem with flowcell * <br><br>log details below:<br>' + "<br>".join(log)
c['errors'] = mark_safe(errors)
else:
c['errors'] = form.errors
else:
form = ImportExcelForm() # An unbound form
c['form'] = form
return render_to_response('sequencing/file_upload.html')
e come suggerito in un altro uso post xlrd per leggere i dati dal file excel. Ho un ExcelParser.py file separato per questo
import xlrd
class ExcelParser(object, excel_name):
@transaction.commit_on_success
def read_excel(self):
wb = xlrd.open_workbook(excel_name)
...
do your parsing in here.....
...
(Posso aggiungere, che Excel è un modo incline terribile, e l'errore per importare i dati. Faccio un sacco di esso al mio lavoro, e sto cercando di convincere il management che ci sono soluzioni migliori.)
django-import-export potrebbe essere utile.
Crea due pulsanti "importa" e "esporta" per oggetti di amministrazione e consente di selezionare molti tipi di estensioni, inclusi xls. Mostra anche i dati da importare e chiede di essere confermato prima di eseguire l'esecuzione.
È sufficiente includerlo in INSTALLED_APPS e creare una risorsa di importazione/esportazione della classe che si desidera caricare e una sottoclasse di ImportExportModelAdmin correlata alla classe di risorse creata in precedenza per mostrare i pulsanti nell'admin. più
info at:
http://django-import-export.readthedocs.org/en/latest/getting_started.html https://github.com/bmihelac/django-import-export.
Questa è una grande domanda - qualcosa che un altro sviluppatore che conosco ha avuto bisogno in precedenza di Django, e che io stesso ho bisogno in uno dei miei progetti in questo momento. La domanda dovrebbe essere riaperta in modo che possiamo condividere il modo in cui il caricamento di Excel funziona sull'interfaccia di Django Admin. –
Oh - e, nel frattempo, c'è una domanda simile che le persone possono consultare, ma che coinvolge il formato di file '.csv' invece del formato di file Excel: http://stackoverflow.com/questions/3974620/ –