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中处理列表之reverse()方法的使用教程
May 21 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
详解flask表单提交的两种方式
Jul 21 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
python实现简单多人聊天室
Dec 11 Python
如何用python写一个简单的词法分析器
Dec 18 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
python定时任务 sched模块用法实例
Nov 04 Python
Django中提示消息messages的设置方式
Nov 15 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
Python txt文件如何转换成字典
Nov 03 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
拖动一个HTML元素
2006/12/22 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
Jquery把获取到的input值转换成json
2017/05/15 jQuery
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
Python IDLE入门简介
2017/12/08 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
我的画教学反思
2014/04/28 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
中考标语大全
2014/06/05 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
故宫英文导游词
2015/01/31 职场文书
手术室护士个人总结
2015/02/13 职场文书
英文产品推荐信
2015/03/27 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书