举例讲解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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
在Python中使用异步Socket编程性能测试
Jun 25 Python
Python fileinput模块使用实例
Jun 03 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
Django 使用easy_thumbnails压缩上传的图片方法
Jul 26 Python
Pyqt5自适应布局实例
Dec 13 Python
pycharm快捷键汇总
Feb 14 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
Django mysqlclient安装和使用详解
Sep 17 Python
python绘制高斯曲线
Feb 19 Python
python上下文管理的使用场景实例讲解
Mar 03 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中对数据库操作的封装
2006/10/09 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
js分页代码分享
2014/04/28 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
Python深入学习之装饰器
2014/08/31 Python
Python import自定义模块方法
2015/02/12 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
美国眼镜网站:LensCrafters
2020/01/19 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
工作自荐信
2013/12/11 职场文书
专升本个人自我评价
2013/12/22 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
幼儿教师辞职信
2015/02/27 职场文书
行政前台岗位职责
2015/04/16 职场文书
python小程序之飘落的银杏
2021/04/17 Python
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python