在Django admin中编辑ManyToManyField的实现方法


Posted in Python onAugust 09, 2019

如何定义多对多关系

Django 本身自带了一个很强大的ORM,支持自定义model并将其映射到数据库的表中

model中可以定义各种类型的数据,比较直观的比如整形, 字符型,也可以定义外键 ForeignKey来指定一对多关系。

关系数据库中有一种多对多的关系,在Django的ORM中也支持它,使用ManyToManyField.

下面使用EmailGroup和Email来展示如何使用

class EmailTo(models.Model):
  name = models.CharField(max_length=64)
  email = models.EmailField(max_length=255, unique=True, db_index=True)

  def __unicode__(self):
    return self.name

class EmailGourp(models.Model):
  name = models.CharField(max_length=64)
  email_to = models.ManyToManyField(EmialTo, blank=True)

  def __unicode__(self):
    return self.name

这里就定义了EmailGroup和EmailTo是一个多对多关系,这样在作migrate的时候就会在数据库中多产生一个作Mapping的表,表名一般为emailgroup_email_to

如何编辑多对多关系

Django另一个强大的功能是可以根据model来生成admin site,并且可以对admin site进行定制。但是默认的admin site 对这种ManytoManyField的编辑功能非常的弱小而且还有问题。

就是如果只有这样的话

admin.site.register(EmialGourp)

那如何才能使admin site很好的支持编辑ManytoManyField呢,这样就需要定制化admin site

首先定义EmailGroup的admin

class EmailGroupAdmin(ModelAdmin):
  list_display = ('name',)
  fieldsets = (
    (None, {'fields': ('name', 'email_to')}),
  )
  filter_horizontal = ('email_to',)

这里的重点是使用filter_horizontal

然后将EmailGroupAdmin加入到admin.site中去

admin.site.register(EmialGourp, EmailGroupAdmin)

这样就会有一个非常有好的Admin界面来编辑ManytoManyField

以上这篇在Django admin中编辑ManyToManyField的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用sorted排序的方法小结
Jul 28 Python
python验证码识别实例代码
Feb 03 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
Python for循环生成列表的实例
Jun 15 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
Pandas实现一列数据分隔为两列
May 18 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
python图像处理 PIL Image操作实例
Apr 09 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 #Python
python实现网站用户名密码自动登录功能
Aug 09 #Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 #Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 #Python
python实现读取excel文件中所有sheet操作示例
Aug 09 #Python
django ManyToManyField多对多关系的实例详解
Aug 09 #Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 #Python
You might like
discuz的php防止sql注入函数
2011/01/17 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
基于python编写的微博应用
2014/10/17 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
五年级英语教学反思
2014/01/31 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
工程承诺书怎么写
2014/05/24 职场文书
信息管理专业自荐书
2014/06/05 职场文书
科技活动周标语
2014/10/08 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python