将excel文件从主目录保存到Django中的数据库模型

时间:2019-01-14 21:13:07

标签: python django

如何将pd.dataframe生成的文件保存到某些数据库记录中。

这是视图。

@csrf_exempt
def Data_Communication(request):
    if request.method == 'POST':
        data_sets_number = (len(request.POST)) - 1
        Data_Sets_asNestedList = []
        Data_set_id = request.POST.get('id')
        Data_instance = Data_Sets.objects.get(pk=Data_set_id)
        for x in range(data_sets_number):
            i = 1
            Data_Sets_asNestedList.append(request.POST.getlist('Data'+str(i)))
            i = i + 1
        pd.DataFrame(Data_Sets_asNestedList).to_excel('output.xlsx', header=False, index=False)
        print(Data_Sets_asNestedList)
        return HttpResponse('1')

2 个答案:

答案 0 :(得分:0)

  1. 不要将您的数据随机插入数据库,请使用django验证系统首先验证您的数据。

  2. 检查bulk_create api以存储大块记录。

答案 1 :(得分:0)

如果您希望将生成的Excel文件与模型Data_Sets关联,那么您可能希望向该模型添加FileField

class Data_Sets(models.Model):
    excel_file = fields.FileField()

在视图中创建Excel文件后,即可将其与新字段相关联:

from django.core.files import File

@csrf_exempt
def Data_Communication(request):
    if request.method == 'POST':
        data_sets_number = (len(request.POST)) - 1
        Data_Sets_asNestedList = []
        Data_set_id = request.POST.get('id')
        Data_instance = Data_Sets.objects.get(pk=Data_set_id)
        for x in range(data_sets_number):
            i = 1
            Data_Sets_asNestedList.append(request.POST.getlist('Data'+str(i)))
            i = i + 1
        pd.DataFrame(Data_Sets_asNestedList).to_excel('output.xlsx', header=False, index=False)

        # Associate the Excel file with the model
        with open('output.xlsx', 'rb') as excel:
            Data_instance.excel_file.save('output.xlsx', File(excel))

        print(Data_Sets_asNestedList)
        return HttpResponse('1')

excel文件本身将保存到settings.pyMEDIA_ROOT设置指定的文件夹中,并且模型将通过excel_file属性指向该文件。

请注意,您可能希望为output.xlsx生成一个唯一的文件名,以免请求彼此间出现麻烦。

有关保存文件的其他信息,here