在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的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
matplotlib设置legend图例代码示例
Dec 19 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
超简单使用Python换脸实例
Mar 27 Python
Python数据类型之Set集合实例详解
May 07 Python
python实现批量nii文件转换为png图像
Jul 18 Python
利用python实现周期财务统计可视化
Aug 25 Python
浅谈pycharm使用及设置方法
Sep 09 Python
python随机生成库faker库api实例详解
Nov 28 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
Python批量处理csv并保存过程解析
May 16 Python
python Tornado框架的使用示例
Oct 19 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数组应该有多大的分析
2009/07/30 PHP
php数字游戏 计算24算法
2012/06/10 PHP
php上传图片生成缩略图(GD库)
2016/01/06 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
popdiv
2006/07/14 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
React实现todolist功能
2020/12/28 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
Python全局变量用法实例分析
2016/07/19 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
中间件分为哪几类
2012/03/14 面试题
最热门的自我评价
2013/12/30 职场文书
优秀求职信范文分享
2014/01/26 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
暑期研修感言
2014/02/17 职场文书
职业生涯规划书前言
2014/04/15 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
装配出错检讨书
2014/09/23 职场文书
技术员个人工作总结
2015/03/03 职场文书
如何基于python实现单目三维重建详解
2022/06/25 Python