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 输出一个两行字符的变量
Feb 05 Python
python实现apahce网站日志分析示例
Apr 02 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
在Python中操作列表之List.append()方法的使用
May 20 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
python 判断网络连通的实现方法
Apr 22 Python
python解析json串与正则匹配对比方法
Dec 20 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
Python实现名片管理系统
Feb 14 Python
Python截图并保存的具体实例
Jan 14 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
PHP 图像尺寸调整代码
2010/05/26 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
PHP速成大法
2015/01/30 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
python 编码规范整理
2018/05/05 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
自主招生自荐信范文
2013/12/04 职场文书
总经理的岗位职责
2014/02/23 职场文书
市级文明单位申报材料
2014/05/07 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
杭白菊导游词
2015/02/10 职场文书
导游带团欢迎词
2015/09/30 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电