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中无限元素列表的实现方法
Aug 18 Python
python超简单解决约瑟夫环问题
May 12 Python
Django Admin实现上传图片校验功能
Mar 06 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
python实现AES和RSA加解密的方法
Mar 28 Python
linux下python中文乱码解决方案详解
Aug 28 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
python程序输出无内容的解决方式
Apr 09 Python
Python collections模块的使用方法
Oct 09 Python
Python hashlib模块的使用示例
Oct 09 Python
python如何将mat文件转为png
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
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
php判断目录存在的简单方法
2019/09/26 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python 错误和异常小结
2013/10/09 Python
Python实现115网盘自动下载的方法
2014/09/30 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Python中datetime常用时间处理方法
2015/06/15 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
QML实现钟表效果
2020/06/02 Python
Python如何合并多个字典或映射
2020/07/24 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
百度软件工程师职位
2013/02/14 面试题
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
女大学生毕业找工作的自我评价
2013/10/03 职场文书
学习标兵获奖感言
2014/02/20 职场文书
中药学专业求职信
2014/05/31 职场文书
代理人委托书
2014/08/01 职场文书
机关作风建设整改方案
2014/10/27 职场文书
欢迎词范文
2015/01/27 职场文书
运动员代表致辞
2015/07/29 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技