如何使用Django Admin管理后台导入CSV


Posted in Python onNovember 06, 2020

假设你需要允许在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

以上就是如何使用Django Admin管理后台导入CSV的详细内容,更多关于Django Admin导入CSV的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
python时间整形转标准格式的示例分享
Feb 14 Python
python复制文件的方法实例详解
May 22 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
浅谈对yield的初步理解
May 29 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
Python文件时间操作步骤代码详解
Apr 13 Python
Python自省及反射原理实例详解
Jul 06 Python
python OpenCV学习笔记
Mar 31 Python
Python anaconda安装库命令详解
Oct 16 Python
python Tkinter模块使用方法详解
Apr 07 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 #Python
python两种获取剪贴板内容的方法
Nov 06 #Python
用python写一个带有gui界面的密码生成器
Nov 06 #Python
python如何编写类似nmap的扫描工具
Nov 06 #Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 #Python
基于Python模拟浏览器发送http请求
Nov 06 #Python
python如何写个俄罗斯方块
Nov 06 #Python
You might like
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
php生成短网址示例
2014/05/05 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
IE与FireFox中的childNodes区别
2011/10/20 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python 解压pkl文件的方法
2018/10/25 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
Python是如何进行类型转换的
2013/06/09 面试题
少先队学雷锋活动月总结
2014/03/09 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
2015元旦节寄语
2014/12/08 职场文书
期末个人总结范文
2015/02/13 职场文书
不同意离婚代理词
2015/05/23 职场文书
Python 语言实现六大查找算法
2021/06/30 Python
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技