在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代码来绘制彭罗斯点阵的教程
Apr 03 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Python中datetime模块参考手册
Jan 13 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
Python可变和不可变、类的私有属性实例分析
May 31 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
详解Python中的Lock和Rlock
Jan 26 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
用JS实现简单的登录验证功能
2017/07/28 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
使用python实现接口的方法
2017/07/07 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
英国标准协会商店:BSI Shop
2019/02/25 全球购物
ajax是什么及其工作原理
2012/02/08 面试题
技能比赛获奖感言
2014/02/14 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
六五普法宣传标语
2014/10/06 职场文书
扬州个园导游词
2015/02/06 职场文书
确保工程质量承诺书
2015/04/29 职场文书
活动总结模板大全
2015/05/11 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL