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中IPYTHON入门实例
May 11 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
python时间日期操作方法实例小结
Feb 06 Python
python实现简单学生信息管理系统
Apr 09 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
Python中Cookies导出某站用户数据的方法
May 17 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 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
一个ftp类(ini.php)
2006/10/09 PHP
开发大型PHP项目的方法
2006/10/09 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
对于Python的框架中一些会话程序的管理
2015/04/20 Python
Python中实现三目运算的方法
2015/06/21 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
DJI全球:DJI Global
2021/03/15 全球购物
JDO的含义
2012/11/17 面试题
女儿十岁生日答谢词
2014/01/27 职场文书
专题组织生活会方案
2014/06/15 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
学生会招新宣传语
2015/07/13 职场文书
患者身份识别制度
2015/08/06 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS