举例讲解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之简单主机批量管理工具
Jan 27 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Python下简易的单例模式详解
Apr 08 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
python数据持久存储 pickle模块的基本使用方法解析
Aug 30 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
Python学习之os包使用教程详解
Mar 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
在Python的Django框架中编写编译函数
Jul 20 #Python
You might like
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
php生成随机数的三种方法
2014/09/10 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
phpStorm2020 注册码
2020/09/17 PHP
遍历jquery对象的代码分享
2011/11/02 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
python实现超简单端口转发的方法
2015/03/13 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
Python实现微信机器人的方法
2019/09/06 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
自主招生自荐信
2013/12/08 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
2022漫威和DC电影上映作品
2022/04/05 欧美动漫
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB