2015-12-10 8 views
8

enter image description hereकैसे मैन्युअल रूप से जानकारी संलग्न करने के लिए जब एक्सेल अपलोड करने और डेटाबेस

एक्सेल 3 कॉलम के साथ छोड़ दिया चित्र की तरह है में डालने django1.8-।

डेटाबेस में डालने पर, मुझे सही ढंग से दिखाए गए 2 कॉलम और मैन्युअल रूप से डेटाबेस में 5 कॉलम डालने की आवश्यकता है। ये 2 अतिरिक्त कॉलम जानकारी अन्य डेटाबेस से प्राप्त की जाती है।

और एक और समारोह अगर वहाँ पहले से ही फ़ाइल विद्यमान है, नई अपलोड की गई फ़ाइल मौजूदा एक स्थान पर आ जाएगी है।

मैं पहले से ही दो 3 पार्टी उपकरण नहीं बल्कि काम करता है की कोशिश की है [नीचे views.py में स्निपेट], इसलिए शायद यह अभी भी django में एम्बेडेड एक का उपयोग करने के लिए बेहतर है।

संस्करण: पायथन 2.7। एक्सेल 2013. Django1.8।

किसी भी मदद की अत्यधिक सराहना की जाती है।

uploader = request.session['uploader'] 
Date=request.session['date'] 

forms.py

from django.core.files.storage import FileSystemStorage 
from financialdata.storage import OverwriteStorage 

class XXXXDataForm(forms.Form): 
    XXXXfile=forms.FileField(label='Select a file') 

views.py

from django.core.files.storage import FileSystemStorage 

def import_data(request): 
    if request.method == "POST": 
     form = XXXXForm(request.POST,request.FILES) 
     if form.is_valid(): 
      newdoc= XXXX(docfile=request.FILES['docfile']) 
      newdoc.save() 
      return HttpResponseRedirect(reverse('homepage')) 
     else: 
      return HttpResponseBadRequest() 
    else: 
     form = XXXXForm() 
    return render_to_response(
     'dataentry.html', 
     { 
      'form': form, 
      'title': 'Import excel data into database example', 
      'header': 'Please upload XXXX.xlsx:', 
      'message': 'File Saved!' 
     }, 
     context_instance=RequestContext(request)) 

<!--How can I embed the following part to previous part?--> 

class OverwriteStorage(FileSystemStorage): 
    def _save(self, name, content): 
     if self.exists(name): 
      self.delete(name) 
     return super(OverwriteStorage, self)._save(name, content) 

    def get_available_name(self, name): 
     return name 
+0

आप न अपने हटाने समारोह – maazza

+0

@maazza फोन है, तो आप अपने को सही कोड के नीचे चिपकाएं सकता है? धन्यवाद। –

+0

जैसा कि @maazza ने कहा, आपने अपना कार्य बनाया है, लेकिन आप इसे कॉल नहीं कर रहे हैं। कोड में कहीं आपको इसे कॉल करना चाहिए ताकि यह चलता है .. – qasimalbaqali

उत्तर

6

ऐसा हो सकता है: आशा कैसे इन 2 कॉलम संलग्न करने के लिए के लिए विस्तार टुकड़ा प्रदान कर सकता है:

मैं अपने कोड नहीं चला, यह एक उदाहरण

if request.method == "POST": 
     form = XXXXForm(request.POST,request.FILES) 
     if form.is_valid(): 
      docfile=request.FILES['docfile']

  if isinstance(docfile, (InMemoryUploadedFile, TemporaryUploadedFile)): 
      book = xlrd.open_workbook(file_contents=docfile.read(), formatting_info=True, on_demand=True) 
     else: 
      book = xlrd.open_workbook(filename=docfile, formatting_info=True, on_demand=True) 

     sheet = book.sheet_by_index(0) 
     new_csv_file = csv.writer(open('new_filename', 'w')) 
     # read file 
     for line in range(1, sheet.nrows): 
      new_row = [request.session.get('uploader'), request.session.get('date')] 
      new_row.extend(sheet.row_values(line))     
      new_csv_file.writerow(new_row) 

...

+0

हाय @ एमआरवीओएल, असल में अंत में मैंने SQL कच्ची क्वेरी का उपयोग करके एक और विधि ली, यह सिर्फ एक हैक है, लेकिन कम से कम मुद्दों को हल कर सकता है। –

+0

@ हेलेना यदि आप डीबी डेटा में डालना चाहते हैं, तो यह सबसे आसान है। सबसे पहले, आपको इस डेटा के लिए मॉडल बनाना होगा। यह फ़ील्ड 'अपलोडर, दिनांक, प्रश्न, विकल्प, वोट' के साथ कुछ है। फॉर्म सफाई के बाद, फ़ाइल को दोबारा उदाहरण के रूप में दोहराएं, और मूल्यों के साथ सूची बनाएं। फिर अपनी सूची को डीबी में इस https://docs.djangoproject.com/en/1.9/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create की तरह सहेजें – mrvol

संबंधित मुद्दे

 संबंधित मुद्दे