我有一个宿舍的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的文件字段的表单然后通过解析填充数据库,问题就是我们无法对路径进行硬编码。那我们该怎么做呢。
EDIT 的 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
答案 0 :(得分:0)
您可以轻松覆盖表单的clean()
方法,并将自定义数据内容保存到数据库中
def clean(self):
super(DocumentForm, self).clean()
import csv
with open((self.cleaned_data['file']), 'rb') as csvfile:
spamreader = csv.reader(csvfile)
for row in spamreader:
// DO WHATEVER YOU WANT