在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里隐藏的“禅”
Jun 16 Python
Python中static相关知识小结
Jan 02 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
PyTorch中permute的用法详解
Dec 30 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
详解python logging日志传输
Jul 01 Python
Python如何设置指定窗口为前台活动窗口
Aug 12 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 header函数分析详解
2011/08/06 PHP
20个PHP常用类库小结
2011/09/11 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
Python生成随机验证码的两种方法
2015/12/22 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
python 通过exifread读取照片信息
2020/12/24 Python
关于python中remove的一些坑小结
2021/01/04 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
AJax面试题
2014/11/25 面试题
烹调加工管理制度
2014/02/04 职场文书
媒体宣传策划方案
2014/05/25 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
主要领导对照检查材料
2014/08/26 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
办公经费申请报告
2015/05/15 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
MySQL三种方式实现递归查询
2022/04/18 MySQL