导入xls文件并将数据存储到Django中的数据库中

时间:2013-05-10 14:36:54

标签: django parsing django-models django-forms django-views

views.py

def contact_list(request):
    importform = ImportExcelForm() 
    if request.method == 'POST': 
        importform = ImportExcelForm(request.POST,  request.FILES) 
        if importform.is_valid(): 
            input_excel = request.FILES['input_excel']
            book = xlrd.open_workbook(file_contents=input_excel.read())
            excel_parser= ExcelParser()
            success, log  = excel_parser.read_excel(request.FILES['input_excel'] )  
            return redirect('/member/incident-types/')
    else:
        importform = ImportExcelForm() 
    return render(request, 'incident/contact_list.html',
                  {
                   'about_menu': True,
                   'ImportExcelForm':importform,
                 })

forms.py

class ImportExcelForm(Form):
    input_excel  = forms.FileField()
    user = forms.ModelChoiceField(queryset=Contacts.objects.all())

def save(self):
    records = xls.reader(self.cleaned_data["input_excel"])
    for line in records:
        input_data = Data()
        input_data.place = self.cleaned_data["user"]
        input_data.name = line[1]
        input_data.number = line[2]
        input_data.save()

models.py

class Contacts(models.Model):   
    user = models.ForeignKey(User, null=True)
    name =  models.CharField('Name', max_length=100)
    number =  models.IntegerField()

这是导入xls文件,读取和写入xls文件中的名称和联系人号码到数据库字段。我没有收到任何错误,但它没有解析数据库中的数据。

1 个答案:

答案 0 :(得分:0)

我不确定你期待在这里发生什么。你的表单保存方法(假设它正确缩进,而不是正确缩进)迭代self.cleaned_data["input_excel"]的内容,这是一个文件名,而不是文件。但无论如何,您的视图在任何时候都不会调用save方法。它所做的是使用一组完全不同的Excel解析函数,将它们读入一对局部变量,然后对函数返回时超出范围的那些变量的内容什么都不做。

我建议你考虑一下你的逻辑流应该是什么,写下来,然后编写代码来匹配它。