如何使用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实现文件按照日期命名的方法
Jul 09 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
如何实现更换Jupyter Notebook内核Python版本
May 18 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
python 利用panda 实现列联表(交叉表)
Feb 06 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 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获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
php之可变函数的实例详解
2017/09/13 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
浅谈Python实现2种文件复制的方法
2018/01/19 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
weblogic面试题
2016/03/07 面试题
大学校庆邀请函
2014/01/11 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
学习十八大报告感言
2014/02/04 职场文书
工作所在部门证明
2014/09/21 职场文书
2014年财务人员工作总结
2014/11/11 职场文书