Django Admin 实现 CSV 数据导入功能详解

山海之间
山海之间
发布时间:2026-10-14 | 4人浏览过
原创

本文介绍如何在 Django Admin 中实现 CSV 数据导入功能。通过自定义 ModelAdmin 添加处理 POST 请求的方法,创建 changelist 模板以添加导入链接,并编写上传页面表单。修改后,后台列表页将显示 Import CSV 链接,点击即可上传并处理 CSV 文件数据。

Django Admin 实现 CSV 数据导入功能详解

若需在 Hero 管理页面支持 CSV 数据导入,首先需添加一个指向 Hero 列表变更页面的链接,点击该链接可跳转至上传页面。接着,需编写处理 POST 请求的方法,以便从 CSV 文件中提取数据对象:


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
    )

随后,创建模板文件 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 %}

最后,创建上传页面 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 的完整流程,如需了解更多 Django Admin 导入 CSV 的相关信息,请参阅本站其他相关文章。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表