2017-02-22 9 views
1

У меня проблема при разрыве текста из одного столбца в ms excel и вставка его в 2 столбца в моделях Django. это мой views.pyКак взорвать текст в одном столбце от excel до 2 модели в django?

class UploadFileForm(forms.Form): 
    file = forms.FileField() 

def import_data(request): 
    if request.method == "POST": 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      request.FILES['file'].save_to_database(
       model=Transaksi, 
       mapdict=['tanggal', 'kode','unit','keterangan', 'nominal'], 

      ) 
      return HttpResponse("OK", status=200) 
     else: 
      return HttpResponseBadRequest('Gagal Upload') 
    else: 
     form = UploadFileForm() 
     return render(request, 'kastransaksi/transaksi_formupload.html', {'form': form}) 

это мой models.py

class Transaksi(models.Model): 
    tanggal = models.DateField(null=True, blank=True) 
    kode = models.CharField(max_length=2, null=True, blank=True) 
    unit = models.CharField(max_length=2, null=True, blank=True) 
    keterangan = models.CharField(max_length=100, null=True, blank=True) 
    nominal = models.IntegerField(null=True, blank=True) 

и мой файл Excel состоят только три колонки

tangal  keterangan         nominal 
19/01/2016 944448800010303282-SPP Raihanah Barmim  205000 
19/02/2016 944448800010303282-SPP Raihanah Barmim  205000 

Я хочу, чтобы разделить текст с 'keterangan' столбец в поле модели Django есть «kode» и «unit». Как это сделать?

+0

взорваться или исключить .. ?? –

+0

взорвать текст @PrakharTrivedi. Я отредактировал свой вопрос – Gusan

+0

помогите мне @PrakharTrivedi – Gusan

ответ

1

save_to_database - удобный способ импорта листа excel в модель базы данных. Если расширенный лист нуждается в дополнительной обработке данных, вы всегда можете получить pyexcel sheet, а затем продолжить форматирование, а затем вызвать save_to_django_model.

 sheet = request.FILES['file'].get_sheet() 
     ...process sheet data.. 
     sheet.save_to_django_model(
      model=Transaksi, 
      mapdict=['tanggal', 'kode','unit','keterangan', 'nominal'], 

     ) 
     return HttpResponse("OK", status=200) 

Вот пример данных пререканий код:

>>> import pyexcel as p 
>>> s=p.get_sheet(file_name='42381732.tsv') 
>>> s 
42381732.tsv: 
+------------+----------------------------------------+---------+ 
| tangal  | keterangan        | nominal | 
+------------+----------------------------------------+---------+ 
| 19/01/2016 | 944448800010303282-SPP Raihanah Barmim | 205000 | 
+------------+----------------------------------------+---------+ 
| 19/02/2016 | 944448800010303282-SPP Raihanah Barmim | 205000 | 
+------------+----------------------------------------+---------+ 
>>> rows = [row.split() for row in s.column[1][1:]] 
>>> rows 
[[u'944448800010303282-SPP', u'Raihanah', u'Barmim'], [u'944448800010303282-SPP', u'Raihanah', u'Barmim']] 
>>> rows= [[row[0], ' '.join(row[1:])] for row in rows] 
>>> rows 
[[u'944448800010303282-SPP', u'Raihanah Barmim'], [u'944448800010303282-SPP', u'Raihanah Barmim']] 
>>> rows = [['kode', 'unit']] + rows 
>>> rows 
[['kode', 'unit'], [u'944448800010303282-SPP', u'Raihanah Barmim'], [u'944448800010303282-SPP', u'Raihanah Barmim']] 
>>> s.extend_columns_with_rows(rows) 
>>> s 
42381732.tsv.tsv: 
+------------+----------------------------------------+---------+------------------------+-----------------+ 
| tangal  | keterangan        | nominal | kode     | unit   | 
+------------+----------------------------------------+---------+------------------------+-----------------+ 
| 19/01/2016 | 944448800010303282-SPP Raihanah Barmim | 205000 | 944448800010303282-SPP | Raihanah Barmim | 
+------------+----------------------------------------+---------+------------------------+-----------------+ 
| 19/02/2016 | 944448800010303282-SPP Raihanah Barmim | 205000 | 944448800010303282-SPP | Raihanah Barmim | 
+------------+----------------------------------------+---------+------------------------+-----------------+ 
+0

Я попробую @chfw – Gusan

+0

's = p.get_sheet (имя_файла = '42381732.tsv')' что такое p "@chfw? – Gusan

+0

импорт pyexcel как p, который я пропустил. см. мои обновления. – chfw