举例讲解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 13 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
Numpy之random函数使用学习
Jan 29 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
pygame实现成语填空游戏
Oct 29 Python
python 初始化一个定长的数组实例
Dec 02 Python
Python 内存管理机制全面分析
Jan 16 Python
详解python3类型注释annotations实用案例
Jan 20 Python
Python实现打乒乓小游戏
Sep 25 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
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP 翻页 实例代码
2009/08/07 PHP
php date()日期时间函数详解
2010/05/16 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php实现简单的上传进度条
2015/11/17 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python实现在windows下操作word的方法
2015/04/28 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
python创造虚拟环境方法总结
2019/03/04 Python
python地震数据可视化详解
2019/06/18 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python -v 报错问题的解决方法
2020/09/15 Python
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
中学生学习生活的自我评价
2013/10/26 职场文书
利群广告词
2014/03/20 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
新年寄语大全
2014/04/12 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
python字符串常规操作大全
2021/05/02 Python
MySQL 字符集 character
2022/05/04 MySQL