Vin*_*sso 5 python django file-upload
我正在尝试使用 Django 处理上传的 CSV 文件。我如何做这件事的主要逻辑在models.py和views.py脚本中都有表达。上传文件后,我无法处理任何内容(在我的views.py. 这是两个脚本,但如果我能提供更多信息,我很乐意提供。
在我的models.py文件中,我有两个类,一个用于文档本身,另一个用于文件中的字段。
模型.py:
from django.db import models
import os
class Document(models.Model):
docfile = models.FileField(upload_to='documents')
class DocumentEntry(models.Model):
document = models.ForeignKey(Document, on_delete=models.CASCADE)
field = models.CharField(max_length=250, default="TEST")
Run Code Online (Sandbox Code Playgroud)
接下来,在 my 中,views.py我获取通过 上传的文件request.FILES['docfile']并将其传递给handle_files()函数。但是,当我尝试遍历阅读器时,我无法访问已上传文件中的任何元素。
视图.py:
from django.shortcuts import render
from django.conf import settings
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
import csv
from .models import Document, DocumentEntry
from .forms import UploadFileForm
def process_file(request):
# Handle file upload
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_files(request.FILES['docfile'])
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('process_files'))
else:
form = UploadFileForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render(
request,
'upload/process_files.html',
{'documents': documents, 'form': form}
)
def handle_files(csv_file):
newdoc = Document(docfile=csv_file)
newdoc.save()
reader = csv.DictReader(open(csv_file))
for row in reader:
field = row['field']
entry = DocumentEntry(document=newdoc, field=field)
entry.save()
Run Code Online (Sandbox Code Playgroud)
更新
这是处理函数的完整示例:
def handle_files(csv_file):
newdoc = Document(docfile=csv_file)
newdoc.save()
with open(newdoc.docfile.name) as f:
reader = csv.DictReader(f)
for row in reader:
field = row['field']
entry = DocumentEntry(document=newdoc, field=field)
entry.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4361 次 |
| 最近记录: |