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运行的17个时新手常见错误小结
Aug 07 Python
使用Python中的greenlet包实现并发编程的入门教程
Apr 16 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
简单谈谈python中的lambda表达式
Jan 19 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
python批量赋值操作实例
Oct 22 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
Python如何实现远程方法调用
Aug 07 Python
python dict如何定义
Sep 02 Python
python 提高开发效率的5个小技巧
Oct 19 Python
python制作微博图片爬取工具
Jan 16 Python
python生成随机数、随机字符、随机字符串
Apr 06 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通用检测函数集合
2011/02/08 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
Python分类测试代码实例汇总
2020/07/23 Python
django使用graphql的实例
2020/09/02 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
五一服装活动方案
2014/01/11 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
房产代理公证处委托书
2014/04/04 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
音乐幼师求职信
2014/07/09 职场文书
护士旷工检讨书
2015/08/15 职场文书
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
2022年显卡天梯图(6月更新)
2022/06/17 数码科技
mysql全面解析json/数组
2022/07/07 MySQL