在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爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 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+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
vue实现计算器功能
2020/02/22 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
python tkinter canvas使用实例
2019/11/04 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
称象教学反思
2014/02/03 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
盲山观后感
2015/06/11 职场文书
紧急迫降观后感
2015/06/15 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书