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中os操作文件及文件路径实例汇总
Jan 15 Python
Python os模块学习笔记
Jun 21 Python
Python中模块pymysql查询结果后如何获取字段列表
Jun 05 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
Python中fnmatch模块的使用详情
Nov 30 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
python中使用.py配置文件的方法详解
Nov 23 Python
在Django中使用MQTT的方法
May 10 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类
2006/11/27 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
删除重复数据的算法
2006/11/23 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
vue实现购物车列表
2020/06/30 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
django实现前后台交互实例
2017/08/07 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
财务管理专业自荐信范文
2013/12/24 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
优秀员工推荐材料
2014/12/20 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang