在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中集合类型(set)学习小结
Jan 28 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
Python2随机数列生成器简单实例
Sep 04 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
python学生信息管理系统(初级版)
Oct 17 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
python 图片去噪的方法示例
Jul 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
php实现微信公众号主动推送消息
2015/12/31 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
PHP7内核之Reference详解
2019/03/14 PHP
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
python实现求最长回文子串长度
2018/01/22 Python
Python类中self参数用法详解
2020/02/13 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
师范毕业生求职信
2014/07/11 职场文书
个人授权委托书范本
2014/09/14 职场文书
党内外群众意见范文
2015/06/02 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
如何通过cmd 连接阿里云服务器
2022/04/18 Servers
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS