在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的Django框架中的模版相关知识
Jul 15 Python
Django Admin实现上传图片校验功能
Mar 06 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
python try except 捕获所有异常的实例
Oct 18 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
python实现自动化群控的步骤
Apr 11 Python
Python中requests库的用法详解
Jun 05 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新手上路(十三)
2006/10/09 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
javascript的几种写法总结
2016/09/30 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
微信小程序实现登录遮罩效果
2018/11/01 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
Python 统计字数的思路详解
2018/05/08 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
收款委托书范本
2014/09/11 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
导游词之西安骊山
2019/12/20 职场文书