在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中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
Python字符编码判断方法分析
Jul 01 Python
requests和lxml实现爬虫的方法
Jun 11 Python
深入理解Python3 内置函数大全
Nov 23 Python
对Python 内建函数和保留字详解
Oct 15 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
python抓取搜狗微信公众号文章
Apr 01 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
详解Django定时任务模块设计与实践
Jul 24 Python
Django 实现对已存在的model进行更改
Mar 28 Python
python实现excel公式格式化的示例代码
Dec 23 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
ASP知识讲座四
2006/10/09 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
javascript关于继承解析
2016/05/10 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python返回昨天日期的方法
2015/05/13 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
详解python3实现的web端json通信协议
2016/12/29 Python
对Python中画图时候的线类型详解
2019/07/07 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
python可视化text()函数使用详解
2020/02/11 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
会计自我鉴定范文
2013/10/06 职场文书
项目经理岗位职责
2013/11/11 职场文书
师德师风演讲稿
2014/05/05 职场文书
小学见习报告
2015/06/23 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
Python Pandas解析读写 CSV 文件
2022/04/11 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL