如何在excel中将一列中的文本分解为django中的2个模型?

问题描述:

我在ms excel中从一列爆炸文本并将其插入到Django模型中的2列时遇到问题。 这是我的views.py如何在excel中将一列中的文本分解为django中的2个模型?

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

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(file_name ='42381732.tsv')'什么是“p”@chfw? – Gusan

+0

将pyexcel导入为p,我已忽略它。看我的更新。 – chfw