在Django admin中编辑ManyToManyField的实现方法
如何定义多对多关系
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的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
解决Django后台ManyToManyField显示成Object的问题
如果一个模型里包含了ManyToManyField,在admin后台可能会显示成object,例如 解决方法: 在定义这个类的时候,加多一个函数 实际效果: 以上这篇解决Django后台ManyToManyField显示成Object的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
Django 多表关联 存储 使用方法详解 ManyToManyField save
当models中使用ManyToManyField进行多表关联的时候,需要使用字段的add()方法来增加关联关系的一条记录,让两个实例关联起来才能顺利保存关联关系 #models.py 问题分类question_category和类别使用了多对多关系(先不管是否合理) #coding:utf-8 from django.db import models # Create your models here. class QuestionCategory(models.Model): categor
-
Django ManyToManyField 跨越中间表查询的方法
1.在 django 表中用到了 manytomany 生成了中间表 pyclub_article_column from django.db import models # Create your models here. class Column(models.Model): id = models.AutoField(u'序号',primary_key=True,auto_created=True) name = models.CharField(u'名字',max_length=100)
-
django ManyToManyField多对多关系的实例详解
Django 的 ORM 有多种关系:一对一,多对一,多对多 各自定义的方式为 : 一对一: OneToOneField 多对一: ForeignKey 多对多: ManyToManyField 上边的描述太过数据而缺乏人性化,我们来更人性化一些: 多个属于一个,即 belong to : ForeignKey,多个属于一个 一个有一个,即 has one: OneToOneField 一个有很多个,即 has many: lots of A belong to B 与 B has many A
-
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
对于多对多表 - 1.自定义第三张表,更加灵活 - 2.ManyToManyField 自动生成第3张表 只能 有3列数据 不能自己添加. 自定义第三张表 # models.py class Boy(models.Model): name = models.CharField(max_length=32) class Girl(models.Model): name = models.CharField(max_length=32) class Love(models.Model): b = m
-
在Django admin中编辑ManyToManyField的实现方法
如何定义多对多关系 Django 本身自带了一个很强大的ORM,支持自定义model并将其映射到数据库的表中 model中可以定义各种类型的数据,比较直观的比如整形, 字符型,也可以定义外键 ForeignKey来指定一对多关系. 关系数据库中有一种多对多的关系,在Django的ORM中也支持它,使用ManyToManyField. 下面使用EmailGroup和Email来展示如何使用 class EmailTo(models.Model): name = models.CharField(m
-
Django admin禁用编辑链接和添加删除操作详解
禁用admin中models的编辑链接和添加删除按钮 方法如下: class MyModelAdmin(models.ModelAdmin): ... List_display_links = None #禁用编辑链接 def has_add_permission(self, request): # 禁用添加按钮 return False def has_delete_permission(self, request, obj=None): # 禁用删除按钮 return False def g
-
在django admin中添加自定义视图的例子
django admin提供了完善的用户管理和数据模型管理,方便实用.研究了一下在admin里面添加自己的页面. 在admin.py里继承django.contrib.admin.ModelAdmin基类 class FaceAdmin(admin.ModelAdmin): 然后在里面写自己的视图处理函数.基类里面的save_model和delete_model函数可以做数据对象的新建和删除的预处理和后处理.自建的函数如果要redirect到自己建的view,反向映射要包含admin:,写成 r
-
Django Admin中增加导出CSV功能过程解析
参考 https://books.agiliq.com/projects/django-admin-cookbook/en/latest/export.html 在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图: 增加导出CSV功能 在Django Admin中每个模型的Admin类(继承至admin.ModelAdmin), 我们可以通过actions增加支持的动作, 值为当前类存在的方法名, 例如: ....... @admin.register(Issue
-
Django Admin中增加导出Excel功能过程解析
在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图: 增加导出Excel功能 在Django Admin中每个模型的Admin类(继承至admin.ModelAdmin), 我们可以通过actions增加支持的动作, 值为当前类存在的方法名, 例如: ....... @admin.register(Issue) class IssueAdmin(admin.ModelAdmin): ...... actions = ['export_as_excel'] # 增加
-
在django admin中配置搜索域是一个外键时的处理方法
python 2.7.11 django 1.8.4 错误内容:related Field has invalid lookup: icontains 我原来默认认为在处理外键搜索的时候,django会自动将该外键的行数据以str()化之后进行搜索,但其实并不是这样的,如果将外键加入到搜索域中,需要明确写出来. 这个是我从网上查到的解决方案,测试可用,如下: models.py 文件 # coding:utf8 from django.db import models class Book(mo
-
Django Admin 实现外键过滤的方法
说明和 Model 环境: ➜ python Python 3.6.3 |Anaconda custom (x86_64)| (default, Oct 6 2017, 12:04:38) [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin Type "help", "copyright", "credits" or "license" f
-
django admin 自定义替换change页面模板的方法
举个简单的例子:(此仅限于修改change_form页面) 原来的时候,change_form_list是包含这些按钮的: 因为此页面继承了 {% extends 'admin/change_form.html' %} 所以,可以将admin/change_form.html 拷贝到指定目录,然后重新指定继承模板. {% extends 'admin/englishwordlibrary/recitequestion/change_form.html' %} 然后我在admin/englishw
-
详解在Python的Django框架中创建模板库的方法
不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构). 创建一个模板库分两步走: 第一,决定模板库应该放在哪个Django应用下. 如果你通过 manage.py startapp 创建了一个应用,你可以把它放在那里,或者你可以为模板库单独创建一个应用. 我们更推荐使用后者,因为你的filter可能在后来的工程中有用. 无论你采用何种方式,请确保把你的应用添加到 INSTALLED_APPS 中. 我们稍后会解释这一点. 第二,在适当的Django应用包里创
-
在Python的Django框架中加载模版的方法
为了减少模板加载调用过程及模板本身的冗余代码,Django 提供了一种使用方便且功能强大的 API ,用于从磁盘中加载模板, 要使用此模板加载API,首先你必须将模板的保存位置告诉框架. 设置的保存文件就是settings.py. 如果你是一步步跟随我们学习过来的,马上打开你的settings.py配置文件,找到TEMPLATE_DIRS这项设置吧. 它的默认设置是一个空元组(tuple),加上一些自动生成的注释. TEMPLATE_DIRS = ( # Put strings here, li
随机推荐
- 从数据库中读取记录横向排列
- Office文档在线编辑的一个实现方法
- 使用jQuery清空file文件域的解决方案
- jQuery实用函数用法总结
- 详解Nginx服务器中的日志相关配置
- 让应用程序只运行一个实例的实现方法
- PHP如何通过传引用的思想实现无限分类(代码简单)
- php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
- 在Python的循环体中使用else语句的方法
- C语言二叉树的非递归遍历实例分析
- PHP extract 将数组拆分成多个变量的函数
- alert和confirm功能介绍
- 简单示例AJAX结合PHP代码实现登录效果代码
- js跨域和ajax 跨域问题的实现思路
- MySQL中查询、删除重复记录的方法大全
- 用js调用迅雷下载代码的二种方法
- android onTouchEvent处理机制总结(必看)
- C++将CBitmap类中的图像保存到文件的方法
- C# 向Word中设置/更改文本方向的方法(两种)
- 解决vue打包之后静态资源图片失效的问题