溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在Django Admin管理后臺中如何實(shí)現(xiàn)導(dǎo)入CSV

發(fā)布時間:2020-11-07 14:37:02 來源:億速云 閱讀:371 作者:Leah 欄目:開發(fā)技術(shù)

在Django Admin管理后臺中如何實(shí)現(xiàn)導(dǎo)入CSV?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

假設(shè)你需要允許在Hero管理頁面上導(dǎo)入CSV數(shù)據(jù)。為此,您需要添加一個指向更改Hero列表頁面的鏈接,點(diǎn)擊這個鏈接會跳轉(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管理后臺中如何實(shí)現(xiàn)導(dǎo)入CSV

點(diǎn)擊后上傳頁面顯示如下。

在Django Admin管理后臺中如何實(shí)現(xiàn)導(dǎo)入CSV

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI