举例讲解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

 访问外键(Foreign Key)值

当你获取一个ForeignKey 字段时,你会得到相关的数据模型对象。 例如:

>>> b = Book.objects.get(id=50)
>>> b.publisher
<Publisher: Apress Publishing>
>>> b.publisher.website
u'http://www.apress.com/'

对于用`` ForeignKey`` 来定义的关系来说,在关系的另一端也能反向的追溯回来,只不过由于不对称性的关系而稍有不同。 通过一个`` publisher`` 对象,直接获取 books ,用 publisher.book_set.all() ,如下:

>>> p = Publisher.objects.get(name='Apress Publishing')
>>> p.book_set.all()
[<Book: The Django Book>, <Book: Dive Into Python>, ...]

实际上,book_set 只是一个 QuerySet,所以它可以像QuerySet一样,能实现数据过滤和分切,例如:

>>> p = Publisher.objects.get(name='Apress Publishing')
>>> p.book_set.filter(name__icontains='django')
[<Book: The Django Book>, <Book: Pro Django>]

属性名称book_set是由模型名称的小写(如book)加_set组成的。

Python 相关文章推荐
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
pandas Dataframe行列读取的实例
Jun 08 Python
Python中logging实例讲解
Jan 17 Python
Python Pandas 箱线图的实现
Jul 23 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
详解python itertools功能
Feb 07 Python
Django数据结果集序列化并展示实现过程
Apr 22 Python
django自带的权限管理Permission用法说明
May 13 Python
Python如何实现线程间通信
Jul 30 Python
详解Python yaml模块
Sep 23 Python
Python之字符串的遍历的4种方式
Dec 08 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
在Python的Django框架中编写编译函数
Jul 20 #Python
You might like
php实现的在线人员函数库
2008/04/09 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
php flush类输出缓冲剖析
2008/10/19 PHP
PHP 强制下载文件代码
2010/10/24 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
python单例模式实例分析
2015/04/08 Python
python通过ssh-powershell监控windows的方法
2015/06/02 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
django2笔记之路由path语法的实现
2019/07/17 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
塔吉特百货公司官网:Target
2017/04/27 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
物业管理专业个人的自我评价
2013/11/19 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
2015年银行工作总结范文
2015/04/01 职场文书