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读写文件操作示例程序
Dec 02 Python
零基础写python爬虫之HTTP异常处理
Nov 05 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
May 16 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
Python实现京东秒杀功能代码
May 16 Python
python使用opencv对图像mask处理的方法
Jul 05 Python
详解Django admin高级用法
Nov 06 Python
Django返回HTML文件的实现方法
Sep 17 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导航下拉菜单的实现如此简单
2013/09/22 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
python 自动提交和抓取网页
2009/07/13 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
python设置值及NaN值处理方法
2018/07/03 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
Python文件操作基础流程解析
2020/03/19 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
七年级音乐教学反思
2014/01/26 职场文书
应届生自荐信范文
2014/02/21 职场文书
医学求职信
2014/05/28 职场文书
股权转让协议范本
2014/12/07 职场文书
vue实现锚点定位功能
2021/06/29 Vue.js
vue实现滑动解锁功能
2022/03/03 Vue.js