在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调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
Python算法应用实战之栈详解
Feb 04 Python
python分析作业提交情况
Nov 22 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
Django使用Profile扩展User模块方式
May 14 Python
python 实现的IP 存活扫描脚本
Dec 10 Python
python中str内置函数用法总结
Dec 27 Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 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标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
python之Character string(实例讲解)
2017/09/25 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
Django实现内容缓存实例方法
2020/06/30 Python
Solaris操作系统的线程机制
2015/07/28 面试题
银行会计主管岗位职责
2014/10/01 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
裁员通知
2015/04/25 职场文书
承诺书范本大全
2015/05/04 职场文书
公司表扬稿范文
2015/05/05 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python
vue使用element-ui按需引入
2022/05/20 Vue.js