Import excel data into models via django admin

前端 未结 3 967
面向向阳花
面向向阳花 2021-02-06 06:20

I need the Django Admin interface to accept administrator uploads of Excel files where the data in each Excel file is inserted into my database models. How can I make such an “U

3条回答
  •  北荒
    北荒 (楼主)
    2021-02-06 06:42

    I have done this, but I just set up a simple view with a file upload (actually this makes more sense than adding it directly into a Django admin page, as one edit page = one model instance,and I assume that your excel contains multiple models).

    in forms.py, a simple form with a file upload field

    class ImportExcelForm(forms.Form):
        file  = forms.FileField(label= "Choose excel to upload")    
    

    in views.py, a view to process the upload

    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 * 

    log details below:
    ' + "
    ".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')

    and as suggested in the other post use xlrd to read the data in from the excel file. I have a separate file ExcelParser.py for this

    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.....
            ...
    

    (May I add, that excel is a terrible, and error prone way to import data. I do a lot of it at my work, and am trying to convince management that there are far better solutions.)

提交回复
热议问题