如何使用Django Admin管理后臺導入CSV
假設(shè)你需要允許在Hero管理頁面上導入CSV數(shù)據(jù)。為此,您需要添加一個指向更改Hero列表頁面的鏈接,點擊這個鏈接會跳轉(zhuǎn)到上傳頁面。你需要編寫一個處理POST請求的方法,來從CSV文件中獲取數(shù)據(jù)對象:
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
)
然后創(chuàng)建模板文件entities/heroes_changelist.html,以覆蓋原有的admin/change_list.html:
{% extends 'admin/change_list.html' %}
{% block object-tools %}
<a href="import-csv/" rel="external nofollow" >Import CSV</a>
<br />
{{ block.super }}
{% endblock %}
最后,創(chuàng)建上傳頁面csv_form.html:
{% extends 'admin/base.html' %}
{% block content %}
<div>
<form action="." method="POST" enctype="multipart/form-data">
{{ form.as_p }}
{% csrf_token %}
<button type="submit">Upload CSV</button>
</form>
</div>
<br />
{% endblock %}
修改完后,會在更改Hero后臺列表頁面上會有一個Import CSV的鏈接.

點擊后上傳頁面顯示如下。

以上就是如何使用Django Admin管理后臺導入CSV的詳細內(nèi)容,更多關(guān)于Django Admin導入CSV的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于Python 中的時間處理包datetime和arrow的方法詳解
這篇文章主要介紹了關(guān)于Python 中的時間處理包datetime和arrow的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

