举例讲解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 获取进程pid号的方法
Mar 10 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Python语言的变量认识及操作方法
Feb 11 Python
python flask中静态文件的管理方法
Mar 20 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
vscode配置anaconda3的方法步骤
Aug 08 Python
DRF框架API版本管理实现方法解析
Aug 21 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 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
基于文本的搜索
2006/10/09 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
PHP学习之正则表达式
2011/04/17 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
调试php程序的简单步骤
2019/10/04 PHP
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
艺术设计专业个人求职信
2013/09/21 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
转让协议书范本
2014/04/15 职场文书
公司晚会策划方案
2014/05/17 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
《雷雨》教学反思
2016/02/20 职场文书