2012-04-02 43 views
8

Tôi cần giao diện Quản trị Django để chấp nhận tải lên của quản trị viên tệp Excel nơi dữ liệu trong mỗi tệp Excel được chèn vào mô hình cơ sở dữ liệu của tôi. Làm thế nào tôi có thể thực hiện như một nút "Upload" xuất hiện trên một trang quản trị mô hình Django, nơi nhấn vào nút yêu cầu người quản trị để chọn một tập tin .xls, có dữ liệu sau đó được thêm vào cơ sở dữ liệu sau khi tải lên của nó hoàn tất?Nhập dữ liệu excel vào mô hình qua django admin

+1

Đây là một câu hỏi hay - điều mà một nhà phát triển khác mà tôi biết là cần thiết theo Django trước đây, và bản thân tôi cũng cần một trong những dự án của riêng tôi ngay bây giờ. Câu hỏi cần được mở lại để chúng tôi có thể chia sẻ cách tải lên Excel làm việc với Giao diện quản trị Django. –

+0

Ồ - và, trong khi chờ đợi, có một câu hỏi tương tự mà mọi người có thể tham khảo, nhưng liên quan đến định dạng tệp '.csv' thay vì định dạng tệp Excel: http://stackoverflow.com/questions/3974620/ –

Trả lời

4

Tôi không chắc chắn về phía Django của sự vật, nhưng bạn có thể sử dụng xlrd để đọc và thao tác các tệp Excel. Có một bản PDF miễn phí giải thích điều này được gọi là Working with Excel files in Python

7

Tôi đã làm điều này, nhưng tôi chỉ thiết lập chế độ xem đơn giản với tệp tải lên (thực sự điều này có ý nghĩa hơn là thêm trực tiếp vào trang quản trị Django. page = một thể hiện mô hình, và tôi giả định rằng excel của bạn chứa nhiều mô hình).

trong forms.py, một hình thức đơn giản với một lĩnh vực tập tin tải lên

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

trong views.py, một cái nhìn để xử lý tải lên

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') 

và như đề xuất trong bài sử dụng khác xlrd để đọc dữ liệu từ tệp excel. Tôi có một ExcelParser.py tập tin riêng biệt cho điều này

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

(Tôi có thể thêm, mà nổi trội là một cách dễ khủng khiếp, và lỗi nhập dữ liệu. Tôi làm rất nhiều của nó tại nơi làm việc của tôi, và đang cố gắng để thuyết phục quản lý rằng có các giải pháp tốt hơn nhiều.)

2

django-import-export có thể hữu ích.

Nó tạo hai nút "nhập" và "xuất" cho đối tượng quản trị và cho phép chọn nhiều loại tiện ích mở rộng, bao gồm xls. Nó cũng cho thấy dữ liệu được nhập khẩu và yêu cầu được xác nhận trước khi thực hiện thực thi.

Bạn chỉ cần bao gồm nó trong INSTALLED_APPS và tạo tài nguyên xuất nhập khẩu của lớp bạn muốn tải lên và lớp con của ImportExportModelAdmin liên quan đến lớp tài nguyên được tạo trước để hiển thị các nút trong quản trị viên. Thông tin

hơn tại địa chỉ:

http://django-import-export.readthedocs.org/en/latest/getting_started.html https://github.com/bmihelac/django-import-export.

Các vấn đề liên quan