基于 Django1.10 文档的深入学习(5)—— Making queries 之 FOO_set
来源:互联网 发布:unity3d全套视频教程 编辑:程序博客网 时间:2024/06/15 08:40
进行查询Making queries
创建数据模型后,Django会自动为您提供一个数据库抽象API,您可以创建,检索,更新和删除对象。本文档介绍如何使用此API。有关所有各种型号查找选项的详细信息,请参阅数据模型参考。
在本指南(和参考文献)中,我们将参考以下包含Weblog应用程序的模型:
from django.db import modelsclass Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): # __unicode__ on Python 2 return self.nameclass Author(models.Model): name = models.CharField(max_length=200) email = models.EmailField() def __str__(self): # __unicode__ on Python 2 return self.nameclass Entry(models.Model): blog = models.ForeignKey(Blog) headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateField() mod_date = models.DateField() authors = models.ManyToManyField(Author) n_comments = models.IntegerField() n_pingbacks = models.IntegerField() rating = models.IntegerField() def __str__(self): # __unicode__ on Python 2 return self.headline
相关对象Related objects
当您在模型中定义关系(即ForeignKey
,OneToOneField
或ManyToManyField
)时,该模型的实例将具有方便的API来访问相关对象。
使用此页面顶部的模型,例如,Entry对象e
可以通过访问博客属性e.blog
获取其关联的博客对象。
Django还为关系的“其他”一方创建了API访问器 - 从相关模型到定义关系的模型的链接。例如,博客对象b
可以通过entry_set
属性访问所有相关的Entry对象
的列表:b.entry_set.all()
。
本节中的所有示例都使用本页顶部定义的博客,作者和条目模型。
关系“后退”
如果模型具有ForeignKey
,则外键模型的实例将可以访问返回第一个模型的所有实例的Manager
。 默认情况下,此管理器名为FOO_set
,其中FOO
是源模型名称,小写的。 此管理器返回QuerySets
,可以按照上述“检索对象”部分中所述进行过滤和操作。
例:
>>> b = Blog.objects.get(id=1)>>> b.entry_set.all() # Returns all Entry objects related to Blog.# b.entry_set is a Manager that returns QuerySets.>>> b.entry_set.filter(headline__contains='Lennon')>>> b.entry_set.count()
您可以通过在ForeignKey
定义中设置related_name
参数来覆盖FOO_set
名称。 例如,如果将Entry
模型更改为blog = ForeignKey(Blog,on_delete = models.CASCADE,related_name ='entries')
,则上述示例代码将如下所示:
>>> b = Blog.objects.get(id=1)>>> b.entries.all() # Returns all Entry objects related to Blog.# b.entries is a Manager that returns QuerySets.>>> b.entries.filter(headline__contains='Lennon')>>> b.entries.count()
# 课程信息表class Course(models.Model): name = models.CharField(max_length=50, verbose_name='课程名称') desc = models.CharField(max_length=300, verbose_name='课程描述') detail = models.TextField(verbose_name='课程详情')# 课程章节表class Lesson(models.Model): course = models.ForeignKey(Course, verbose_name='课程') name = models.CharField(max_length=100, verbose_name='章节名') add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')
0 0
- 基于 Django1.10 文档的深入学习(5)—— Making queries 之 FOO_set
- 基于 Django1.10 文档的深入学习(13)—— Making queries 之 Q objects
- 基于 Django1.10 文档的深入学习(2)—— Settings.py 之 STATIC_*
- 基于 Django1.10 文档的深入学习(3)—— models.py 之 FileField
- 基于 Django1.10 文档的深入学习(4)—— models.py 之 class Meta
- 基于 Django1.10 文档的深入学习(6)—— Translation 之 short_description
- 基于 Django1.10 文档的深入学习(8)—— Model field reference 之 choices
- 基于 Django1.10 文档的深入学习(9)—— Extra instance methods 之 get_FOO_display()
- 基于 Django1.10 文档的深入学习(11)—— django.shortcuts 之 render()
- 基于 Django1.10 文档的深入学习(12)—— django.shortcuts 之 redirect()
- 基于 Django1.10 文档的深入学习(13)—— django.core.urlresolvers 之 reverse()
- 基于 Django1.10 文档的深入学习(16)——Authentication backends 之 class ModelBackend
- 基于 Django1.10 文档的深入学习(22)——Sending email 之 send_mail()
- 基于 Django1.10 文档的深入学习(23)—— QuerySet API reference 之 icontains
- 基于 Django1.10 文档的深入学习(25)—— Applications 之 基础部分
- 基于 Django1.10 文档的深入学习(31)—— settings 之 ALLOWED_HOSTS
- 基于 Django1.10 文档的深入学习(10)—— django.contrib.auth 之 User model
- 基于 Django1.10 文档的深入学习(1)—— Settings.py 之 MEDIA_ROOT 与 MEDIA_URL
- 大数据竞赛平台——Kaggle 入门篇
- 使用nodejs的url模块解决地址中的中文乱码问题
- 二 generic netlink
- 测试小故事25:深度与广度
- android 插件化之Activity生命周期之二
- 基于 Django1.10 文档的深入学习(5)—— Making queries 之 FOO_set
- 度量空间(metric space)
- Oracle undo表空间管理
- 数学水题—— 2^x mod n = 1
- Oracle表分区例子
- 小小日历表
- c++ 犯的错误
- yuv-canvas无法支持1366*768分辨率的问题
- WMI Provider Host占用CPU过高