在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 相关文章推荐
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
解决pip install psycopg2出错问题
Jul 09 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
python搜索算法原理及实例讲解
Nov 18 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/03/21 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
基于jquery的表格排序
2010/09/11 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
JSON相关知识汇总
2015/07/03 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
vue实现表格数据的增删改查
2017/07/10 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
python常用函数详解
2016/09/13 Python
Python的语言类型(详解)
2017/06/24 Python
用Python实现随机森林算法的示例
2017/08/24 Python
Python简单读取json文件功能示例
2017/11/30 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python爬取网易云音乐评论
2018/11/16 Python
详解python polyscope库的安装和例程
2020/11/13 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
水务局局长岗位职责
2013/11/28 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
欠条格式范本
2015/07/03 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android