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 25 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
Python做简单的字符串匹配详解
Mar 21 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
Apr 29 Python
简单了解python PEP的一些知识
Jul 13 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
python3实现弹弹球小游戏
Nov 25 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
Feb 17 Python
python实现用户名密码校验
Mar 18 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 CKEditor 上传图片实现代码
2009/11/06 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
解析argc argv在php中的应用
2013/06/24 PHP
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
简单谈谈Python流程控制语句
2016/12/04 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Python格式化输出%s和%d
2018/05/07 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
.net开发工程师面试题
2014/02/25 面试题
星空联盟C# .net笔试题
2014/12/05 面试题
煤矿班组长岗位职责
2013/12/29 职场文书
铁路工务反思材料
2014/02/07 职场文书
公益广告标语
2014/06/19 职场文书
个人先进材料范文
2014/12/30 职场文书
工商局个人工作总结
2015/03/03 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
实验室安全管理制度
2015/08/05 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python