举例讲解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实现巡检系统(solaris)示例
Apr 02 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
儿童编程python入门
May 08 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
在django view中给form传入参数的例子
Jul 19 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
Python 打印自己设计的字体的实例讲解
Jan 04 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判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
浅谈Python中函数的参数传递
2016/06/21 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python networkx包的实现
2020/02/14 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
电视购物广告词
2014/03/19 职场文书
程序员求职信
2014/04/16 职场文书
刑事和解协议书范本
2014/11/19 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
三八节祝酒词
2015/08/11 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书