在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使用wxpython开发简单记事本的方法
May 20 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
python多进程实现进程间通信实例
Nov 24 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
python使用代理ip访问网站的实例
May 07 Python
python进程间通信Queue工作过程详解
Nov 01 Python
Python实现图像的垂直投影示例
Jan 17 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 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程序
2012/02/04 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
php支付宝APP支付功能
2020/07/29 PHP
学习ExtJS border布局
2009/10/08 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
JS中Location使用详解
2015/05/12 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
小程序实现录音功能
2020/09/22 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
python中time包实例详解
2021/02/02 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
Mysql 设置boolean类型的操作
2021/06/04 MySQL
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android