简体   繁体   English

将数据从csv文件存储到django中的模型中?

[英]Storing data from csv file into model in django?

I am submitting csv file from form using POST method and want to save its content into model forms.py 我使用POST方法从表单提交csv文件,并希望将其内容保存到模型forms.py中

class SaveCsvForm(forms.Form):
     upload_file = forms.FileField(label="Uplaod CSV File", help_text="Uploa file in CSV format")

Views.py Views.py

def save_csv(request):
if request.method == 'POST':
    form = SaveCsvForm(request.POST, request.FILES)
    if form.is_valid():
        print("All ok I am check One")
        # instance = CsvStorage(file_field=request.FILES['file'])
        file = request.FILES['upload_file'].read()
        print(file)
        csv_to_db(file)
        ack = {
            'status': 'Success',
            'message': 'Data is successfuly submited into database'
        }
        return JsonResponse(ack)
    else:
        ack = {
            'status': 'Error',
            'message': 'Server Returned '+form.errors.as_json(),
        }
        return JsonResponse(ack)
else:
    form = SaveCsvForm()
    return render(request, 'upload_csv.html', {'form': form})

file handler method for storing data in Model 用于在Model中存储数据的文件处理程序方法

def csv_to_db(filename):
  with open(filename, 'r') as file:
    ''' reading csv file in dictionary format  '''
    reader = csv.DictReader(file)
    for row in reader:
        instance = CsvStorage(username=row['username'],
                              first_name=row['user'],
                              city=row['city'],
                              mobile=row['mobile']
                              )
        instance.save()
        if instance:
            return({'status': 'successfuly'})
        else:
            return({'status': 'error'})

Note: 注意:

1.The main problem is while reading the file 1.主要问题是在阅读文件时

2.I don't want to store file in models fileField 2.我不想将文件存储在模型fileField

我最后在Django中使用FileSystemStorage类,如文档中所述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM