我有一個Django模型的宿舍,其中一個字段FileUpload從中我將採取一個CSV文件並填充數據庫,我一直在嘗試過去兩天搜索如何這樣做,但不能得到那個工作 這個how to import csv data into django models問題的作品,但只有當我有文件的路徑,我嘗試了很多方法,但沒有成功。此外在那之後我試圖尋找更難How do I get a files absolute path after being uploaded in Django?我看到這個但即使如此,因爲它顯示了一些錯誤將數據從一個CSV文件存儲到數據庫
我用這個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,然後通過解析填充數據庫的FileField的形式,問題在於:我們不能硬編碼路徑。那麼我們應該怎麼做。
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
我是新手,精心製作怎麼樣。 – 4rshdeep
將此代碼添加到您的'DocumentForm'中,然後迭代您的文件並將其保存到數據庫中 –
@unpaired_electron在另一個[post](https://stackoverflow.com/a/44343404/1526703)上看到您的問題,然後返回檢查你是否仍然需要幫助。在Moe Far的回覆中,_file_是接受csv文件路徑的字段的名稱(因此您不必對其進行硬編碼)。一旦你按照Moe的建議添加了上面的代碼,用戶可以簡單地在前端輸入路徑,並且可以將csv提供給數據庫(你如何從csv填充數據庫,進入'做你想做的任何事情'部分在上面的代碼中)。回覆,如果你需要更多的澄清 – Anupam