我想创建将 csv 数据导入数据库。我在我的应用程序上添加了导入按钮。覆盖 app/change_list。按钮将被正确添加。我想添加单击“导入”按钮文件的操作将上传到同一模板页面。并且数据将被保存。我参考链接
但我不明白管理过程。我想在弹出窗口中打开文件上传选项,如 image_file 上传。
我想创建将 csv 数据导入数据库。我在我的应用程序上添加了导入按钮。覆盖 app/change_list。按钮将被正确添加。我想添加单击“导入”按钮文件的操作将上传到同一模板页面。并且数据将被保存。我参考链接
但我不明白管理过程。我想在弹出窗口中打开文件上传选项,如 image_file 上传。
我编写并使用了以下代码:
import csv
def importcsv(request):
if request.method == "POST":
form = DataInput(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('Url/')
else:
form = DataInput()
context = {"form": form}
return render_to_response("imported.html", context,context_instance=RequestContext(request))
并在创建的 import.html 文件中具有以下形式
<form enctype="multipart/form-data" action="" method="post" id="importform">
在 admin cookbook 网站上有一个非常好的上传 CSV 示例:
https://books.agiliq.com/projects/django-admin-cookbook/en/latest/import.html
代码如下:
class CsvImportForm(forms.Form):
csv_file = forms.FileField()
@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin, ExportCsvMixin):
...
change_list_template = "entities/heroes_changelist.html"
def get_urls(self):
urls = super().get_urls()
my_urls = [
...
path('import-csv/', self.import_csv),
]
return my_urls + urls
def import_csv(self, request):
if request.method == "POST":
csv_file = request.FILES["csv_file"]
reader = csv.reader(csv_file)
# Create Hero objects from passed in data
# ...
self.message_user(request, "Your csv file has been imported")
return redirect("..")
form = CsvImportForm()
payload = {"form": form}
return render(
request, "admin/csv_form.html", payload
)