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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
详解python之配置日志的几种方式
May 22 Python
Python实现的多进程和多线程功能示例
May 29 Python
python脚本实现验证码识别
Jun 07 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
在Python中定义一个常量的方法
Nov 10 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
python实现登录密码重置简易操作代码
Aug 14 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 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
用mysql内存表来代替php session的类
2009/02/01 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
php浏览历史记录的方法
2015/03/10 PHP
简单实现PHP留言板功能
2016/12/21 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
图解JS原型和原型链实现原理
2020/09/15 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
Django中URLconf和include()的协同工作方法
2015/07/20 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
python中对_init_的理解及实例解析
2019/10/11 Python
Opencv求取连通区域重心实例
2020/06/04 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
linux面试题参考答案(8)
2016/04/19 面试题
售后服务承诺书
2014/03/26 职场文书
环保小标语
2014/06/13 职场文书
全新239军机修复记
2022/04/05 无线电