Django的数据模型访问多对多键值的方法


Posted in Python onJuly 21, 2015

这里先来借用一个书本(book)的数据模型作为例子:

from django.db import models

class Publisher(models.Model):
  name = models.CharField(max_length=30)
  address = models.CharField(max_length=50)
  city = models.CharField(max_length=60)
  state_province = models.CharField(max_length=30)
  country = models.CharField(max_length=50)
  website = models.URLField()

  def __unicode__(self):
    return self.name

class Author(models.Model):
  first_name = models.CharField(max_length=30)
  last_name = models.CharField(max_length=40)
  email = models.EmailField()

  def __unicode__(self):
    return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
  title = models.CharField(max_length=100)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher)
  publication_date = models.DateField()

  def __unicode__(self):
    return self.title

 访问多对多值(Many-to-Many Values)

多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。 例如,这里是如何查看书籍的作者:

>>> b = Book.objects.get(id=50)
>>> b.authors.all()
[<Author: Adrian Holovaty>, <Author: Jacob Kaplan-Moss>]
>>> b.authors.filter(first_name='Adrian')
[<Author: Adrian Holovaty>]
>>> b.authors.filter(first_name='Adam')
[]

反向查询也可以。 要查看一个作者的所有书籍,使用author.book_set ,就如这样:

>>> a = Author.objects.get(first_name='Adrian', last_name='Holovaty')
>>> a.book_set.all()
[<Book: The Django Book>, <Book: Adrian's Other Book>]

这里,就像使用 ForeignKey字段一样,属性名book_set是在数据模型(model)名后追加_set。

Python 相关文章推荐
python创建一个最简单http webserver服务器的方法
May 08 Python
python实现数据图表
Jul 29 Python
机器学习python实战之手写数字识别
Nov 01 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
解决python线程卡死的问题
Feb 18 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
python自定义函数def的应用详解
Jun 03 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
Nov 28 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 #Python
编写自定义的Django模板加载器的简单示例
Jul 21 #Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 #Python
剖析Django中模版标签的解析与参数传递
Jul 21 #Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 #Python
在Django的上下文中设置变量的方法
Jul 20 #Python
在Django中编写模版节点及注册标签的方法
Jul 20 #Python
You might like
重置版战役片段
2020/04/09 魔兽争霸
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
JS实现放烟花效果
2020/03/10 Javascript
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
python读写二进制文件的方法
2015/05/09 Python
详解Django中的form库的使用
2015/07/18 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
幼儿园教研活动方案
2014/01/19 职场文书
《锄禾》教学反思
2014/04/08 职场文书
工作会议方案
2014/05/21 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL