举例讲解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 21 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
python之消除前缀重命名的方法
Oct 21 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
Python解决pip install时出现的Could not fetch URL问题
Aug 01 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
python实现最速下降法
Mar 24 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
通用的Django注册功能模块实现方法
Feb 05 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
十天学会php之第五天
2006/10/09 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
php实现的农历算法实例
2015/08/11 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php实现微信支付之现金红包
2018/05/30 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
python实现ip查询示例
2014/03/26 Python
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
softmax及python实现过程解析
2019/09/30 Python
Pytorch中.new()的作用详解
2020/02/18 Python
python实现横向拼接图片
2020/03/23 Python
PyTorch-GPU加速实例
2020/06/23 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
高中生期末评语
2014/01/28 职场文书
法院信息化建设方案
2014/05/21 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
群众路线调研报告范文
2014/11/03 职场文书
实训报告范文大全
2014/11/04 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
入党介绍人考察意见
2015/06/01 职场文书
早上好问候语大全
2015/11/10 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android