举例讲解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设计模式之单例模式实例
Apr 26 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
Python简单生成随机数的方法示例
Mar 31 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
python批量获取html内body内容的实例
Jan 02 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
Django视图扩展类知识点详解
Oct 25 Python
在django中form的label和verbose name的区别说明
May 20 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
Django如何重置migration的几种情景
Feb 24 Python
python实现图片批量压缩
Apr 24 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
JS实现php的伪分页
2008/05/25 PHP
服务器web工具 php环境下
2010/12/29 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
python实现五子棋游戏
2019/06/18 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python中树与树的表示知识点总结
2019/09/14 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
父亲节活动总结
2015/02/12 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
开学随笔
2015/08/15 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python