举例讲解Django中数据模型访问外键值的方法

 更新时间:2015年07月21日 09:58:09   投稿:goldensun  
这篇文章主要介绍了举例讲解Django中数据模型访问外键值的方法,Django是最具人气的Python web开发框架,需要的朋友可以参考下

先设置一个关于书本(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的爬虫框架 Scrapy

    详解Python的爬虫框架 Scrapy

    这篇文章主要介绍了Python的爬虫框架 Scrapy的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python实现将内容转为base64编码与解码

    Python实现将内容转为base64编码与解码

    这篇文章主要为大家详细介绍了Python实现将内容转为base64编码与解码的示例代码,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02
  • Python实现二分查找算法实例

    Python实现二分查找算法实例

    这篇文章主要介绍了Python实现二分查找算法,实例分析了二分查找算法的原理与相关实现技巧,需要的朋友可以参考下
    2015-05-05
  • Python filter()及reduce()函数使用方法解析

    Python filter()及reduce()函数使用方法解析

    这篇文章主要介绍了Python filter()及reduce()函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Python中__init__.py文件的作用

    Python中__init__.py文件的作用

    这篇文章主要介绍了Python中__init__.py文件的作用,在PyCharm中,带有__init__.py这个文件的目录被认为是Python的包目录,与普通目录的图标有不一样的显示
    2022-09-09
  • 从源码解析Python的Flask框架中request对象的用法

    从源码解析Python的Flask框架中request对象的用法

    Flask中的request对象发送请求使用起来十分方便,但也有一些需要注意的地方,这里我们来从源码解析Python的Flask框架中request对象的用法,需要的朋友可以参考下.
    2016-06-06
  • python pandas.DataFrame.loc函数使用详解

    python pandas.DataFrame.loc函数使用详解

    这篇文章主要介绍了python pandas.DataFrame.loc函数使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • python 统计list中各个元素出现的次数的几种方法

    python 统计list中各个元素出现的次数的几种方法

    这篇文章主要介绍了python 统计list中各个元素出现的次数的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python数据结构与算法之字典树实现方法示例

    Python数据结构与算法之字典树实现方法示例

    这篇文章主要介绍了Python数据结构与算法之字典树实现方法,可实现针对单词出现次数的统计功能,涉及Python树结构的定义、遍历及统计等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Python在日志中隐藏明文密码的方法

    Python在日志中隐藏明文密码的方法

    logging日志模块是python的一个内置模块,该模块定义了一些函数和类,为上层应用程序或库实现了一个强大而又灵活的日志记录系统,这篇文章主要介绍了Python如何在日志中隐藏明文密码 ,需要的朋友可以参考下
    2023-10-10

最新评论