我有一个旅馆的 Django 模型,其中包含 FileUpload 字段之一,我将从该字段获取 CSV 文件并填充数据库,过去两天我一直在尝试搜索如何做到这一点,但无法正常工作
这如何将csv数据导入django模型 https://stackoverflow.com/questions/2459979/how-to-import-csv-data-into-django-models问题有效,但前提是我有文件的路径,并且我尝试了很多方法但没有成功。之后我也尝试更努力地搜索在Django中如何获取文件上传后的绝对路径? https://stackoverflow.com/questions/42544523/how-do-i-get-a-files-absolute-path-after-being-uploaded-in-django我看到了这个,但即使这样我也无法让它工作,因为它显示了一些错误
我使用了这个 URL 映射url(r'^test/$',views.FileUpload.as_view(),name="test")
但它显示了一些名称空间错误。
请告诉我该怎么做,如果你对我有一些建议,我该怎么重新开始,我真的很失落。
我想从用户那里获取文件,然后填充数据库
这个可以吗(如何将 .csv 文件中的数据传输到 django 中的 sqlite 数据库中? https://stackoverflow.com/questions/1882469/how-do-i-transfer-data-in-csv-file-into-my-sqlite-database-in-django/44343339?noredirect=1#comment75689625_44343339)就像我们可以创建一个带有接受 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', )
模型.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 文件中的数据保存到数据库中,而是将我重定向到必须完成上传的同一页面,并在文档字段中显示错误“此字段为必填”。
Updates: 我解决了这个问题更多细节here https://github.com/4rshdeep/csv2database_django