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 Tkinter GUI编程入门介绍
Mar 10 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
Python流程控制 if else实现解析
Sep 02 Python
Python实现代码统计工具
Sep 19 Python
Python3 中作为一等对象的函数解析
Dec 11 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Django如何批量创建Model
Sep 01 Python
Python 实现微信自动回复的方法
Sep 11 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
Python爬取某拍短视频
Jun 11 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与已存在的Java应用程序集成
2006/10/09 PHP
PHP 事务处理数据实现代码
2010/05/13 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
2016/08/17 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Cpy和Python的效率对比
2015/03/20 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
毕业生就业协议书
2014/04/11 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang