【发布时间】:2017-11-04 16:35:05
【问题描述】:
我有一个宿舍的 Django 模型,其中一个字段是 FileUpload,我将从该字段中获取一个 CSV 文件并填充数据库,过去两天我一直在尝试搜索如何做到这一点,但无法让它工作 这个how to import csv data into django models 问题有效,但前提是我有文件的路径,并且我尝试了很多方法但没有成功。在那之后我尝试更努力地搜索How do I get a files absolute path after being uploaded in Django? 我看到了这个,但即使这样我也无法让它工作,因为它显示了一些错误
我使用了这个 URL 映射
url(r'^test/$',views.FileUpload.as_view(),name="test")
但它显示了一些命名空间错误。 请告诉我该怎么做,如果您对我有一些建议,我应该如何重新开始,我真的很失落。 我想从用户那里获取一个文件,然后填充数据库
这个(How do I transfer data in .csv file into my sqlite database in django?) 是否可以像我们可以创建一个带有接受 csv 的文件字段的表单然后通过解析填充数据库一样,问题在于我们无法对路径进行硬编码。那我们应该怎么做呢。
编辑 views.py
from django.views import View
class FileUpload(View):
def post(self, request):
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
initial_obj = form.save(commit=False)
data=initial_obj['document']
with open((data),'rb') as csvfile:
spamreader = csv.reader(csvfile)
for row in spamreader:
_, created=Document.objects.get_or_create(
name=row[0],
description = row[1],
importance=row[2],
)
initial_obj.save()
form.save()
return redirect('/')
else:
return render(request,'file_upload_form.html',{'form':form})
def get(self, request):
return render(request, 'file_upload_form.html', {'form': form,})
forms.py
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ('description', 'document', )
models.py
class Document(models.Model):
name=models.CharField(max_length=50,blank=True)
description=models.CharField(max_length=255, blank=True)
importance=models.CharField(max_length=10, default="High")
document = models.FileField(upload_to='documents/')
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.description
我没有收到任何错误,但它没有将 CSV 文件中的数据保存在数据库中,并将我重定向到必须完成上传的同一页面,并在文档字段中显示错误“此字段是必需的”。
更新:我解决了更多细节here
【问题讨论】: