首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Django模型中的ForeignKey字段上创建过滤器?

在Django模型中的ForeignKey字段上创建过滤器可以通过使用Django提供的QuerySet API来实现。QuerySet API提供了一系列方法,可以对查询结果进行过滤、排序、限制等操作。

要在ForeignKey字段上创建过滤器,可以使用双下划线(__)语法来指定相关字段的过滤条件。下面是一个示例:

假设我们有两个模型,一个是Author(作者),另一个是Book(书籍),Book模型中有一个ForeignKey字段指向Author模型。

代码语言:txt
复制
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

现在我们想要获取所有作者名字为"John"的书籍,可以使用以下代码:

代码语言:txt
复制
books = Book.objects.filter(author__name="John")

在上述代码中,author__name表示对Book模型中的author字段的name属性进行过滤。这样就可以获取到所有作者名字为"John"的书籍。

除了精确匹配,还可以使用其他查询条件,比如使用icontains进行不区分大小写的模糊匹配:

代码语言:txt
复制
books = Book.objects.filter(author__name__icontains="john")

上述代码将返回所有作者名字中包含"john"(不区分大小写)的书籍。

对于ForeignKey字段的过滤器,还可以使用其他查询条件,比如isnull来判断是否为空:

代码语言:txt
复制
books = Book.objects.filter(author__isnull=True)

上述代码将返回所有没有作者的书籍。

总结一下,在Django模型中的ForeignKey字段上创建过滤器,可以使用双下划线语法指定相关字段的过滤条件,然后使用filter()方法来获取满足条件的查询结果。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CMYSQL):https://cloud.tencent.com/product/cmysql
  • 云数据库 PostgreSQL 版(CDB for PostgreSQL):https://cloud.tencent.com/product/cdb-postgresql
  • 人工智能机器学习平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(Tencent Blockchain):https://cloud.tencent.com/product/tencent-blockchain
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在 Django 创建抽象模型类?

我们将学习如何在 Django 创建抽象模型类。 Django 抽象模型类是一个模型,它用作其他模型继承模板,而不是一个旨在创建或保存到数据库模型。...在应用程序,可以使用抽象模型定义多个模型共享相似字段和行为。使用 Django,您可以定义一个派生自 Django.db.models 模型类,以建立一个抽象模型类。...Django 提供许多字段类,包括 CharField、IntegerField 和 ForeignKey,都可以用来描述字段。可以创建方法来实现特定行为,例如计算属性、自定义查询或验证。...在 Django ,从抽象模型继承遵循与传统模型相同准则。超类声明所有字段和方法都由子类继承,子类可以根据需要替换或添加它们。开发从抽象模型派生模型时,不应将抽象属性设置为 True。...要在 Django 应用程序中使用抽象模型,它必须是已安装应用程序之一一部分,并且必须通过运行所需迁移来创建任何新数据库表或字段

18230

django 模型计算字段实例

verbose_name='姓') given_name = models.CharField(max_length=20, verbose_name='名') def name(self): # 计算字段要显示在修改页面只能定义在只读字段...(app.PersonAdmin),第二个是这个类管理模型实例(Person) return '%s,%s' % (self.family_name, self.given_name)...name.short_description = '全名' # 用于显示时名字 , 没有这个,字段标题将显示'name' readonly_fields = ('name',) admin.site.register...(Person, PersonAdmin) 补充知识:django何在 search_fields 包含外键字段 在search_fields中加入一个外键名字是不能查询,要写成(外键名__外键字段名...,而不是电脑分辨率,就可以搜索'手机 分辨率' 以上这篇django 模型计算字段实例就是小编分享给大家全部内容了,希望能给大家一个参考。

4.4K20

探索 PythonDjango 支持分布式多租户数据库, Postgres+Citus

将租户列引入属于帐户模型 1.1 向属于某个帐户模型引入该列 1.2 在属于一个帐户每个 ManyToMany 模型为 account_id 引入一个列 2....一旦您开始分片数据,这就会成为一个问题,特别是当您对嵌套模型本例任务)运行 UPDATE 或 DELETE 查询时。 1....在所有主键和唯一约束包含 account_id 2.1 将 account_id 包含到主键 Django 会自动在模型创建一个简单 “id” 主键,因此我们需要通过自己自定义迁移来规避这种行为...重新创建约束,包括 account_id 字段 要查找约束,请使用 psql 连接到您数据库并运行 \d+ myapp_projectmanager 你将看到 ManyToMany (或 OneToOneField...使用中间件自动化 而不是在每个视图中调用 set_current_tenant(), 您可以在 Django 应用程序创建并安装一个新 middleware 类来自动完成。

2K10

django 1.8 官方文档翻译:7-3 Django管理文档生成器

Django管理文档生成器 Djangoadmindocs应用从模型、视图、模板标签以及模板过滤器,为任何INSTALLED_APPS应用获取文档。...admindocs页面的models部分描述了系统每个模型,以及所有可用字段和方法(不带任何参数)。...虽然模型属性没有任何参数,但他们没有列出。和其它模型关联以超链接形式出现。描述由字段help_text属性,或者从模型方法docstrings导出。...admindocstags 和filters部分描述了Django自带所有标签和过滤器(事实,内建标签参考 和 内建过滤器参考文档直接来自于那些页面)。...你创建,或者由三方应用添加任何标签或者过滤器,也会在这一部分展示。

76830

Django模型

面向对象是从软件工程基本原则(耦合、聚合、封装)基础发展起来,而关系数据库则是从数学理论发展而来,两套理论存在显著区别。为了解决这个不匹配现象,对象关系映射技术应运而生。...定义属性 Django根据属性类型确定以下信息: 当前选择数据库支持字段类型 渲染管理表单时使用默认html控件 在管理站点最低限度验证 django会为表创建自动增长主键列...,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长主键列。...(queryset) View Code 上去 5.模型类关系 关系字段类型 关系型数据库关系包括三种类型: ForeignKey:一对多,将字段定义在多一端。...通过对象执行关联查询 在定义模型类时,可以指定三种关联关系,最常用是一对多关系,本例"图书-英雄"就为一对多关系。

6.1K21

django_2

要求 修改数据库 Django shell 数据级联(一对多) 元信息 定义字段 模型过滤 创建对象4种方式 查询集 过滤器 获取单个对象 字段查询 时间 聚合函数 跨关系查询 F对象 Q对象..., 这个字段在表必须有唯一值 关系 ·分类 ·ForeignKey:一对多,将字段定义在多 ·ManyToManyField:多对多,将字段定义在两端 ·OneToOneField...在自定义模型无法使用 在模型增加类方法去创建对象 @classmethod def create(cls,p_name,p_age=100):...(Grade) 使用: 模型类名__属性名__比较运算符,实际就是处理数据库join Grade ---g_name Student---》s_name...·unique ·如果为 True, 这个字段在表必须有唯一值 关系 ·分类 ·ForeignKey:一对多,将字段定义在多 ·ManyToManyField

3.6K30

django 1.8 官方文档翻译: 2-2-1 执行查询

为了把数据库表数据表示成python对象,django使用一种直观方式:一个模型类代表数据库一个表,一个模型实例代表数据库表一条特定记录。...保存ForeignKey和ManyToManyField字段 更新ForeignKey字段方式和保存普通字段相同–只是简单地把一个类型正确对象赋值到字段。...第二个过滤器在此基础从这些 blogs 检索与第二种 entry 也相关联 blog。第二个过滤器选择 entry 可能与第一个过滤器所选择完全相同,也可能不同。...在过滤器引用 model 字段(Filters can reference fields on the model) 这部分是 Django 1.1 新增: 请查看版本记录 在上面所有的例子...本质上来说,INSTALLED_APPS 作用之一就是确认 Django 完整 model 范围。 在关联对象查询 包含关联对象查询与包含普通字段查询都遵循相同规则。

4.3K20

DjangoForeignKey和ManyToManyField多表查询

多表查询是模型重要功能之一, Django提供了一套基于关联字段独特解决方案....ForeignKey.related_query_name以ForeignKey.related_name作为默认值 使用ForeignKey查询 前向查询 若关系模型A包含与模型B关联关联字段, 模型...ManyToManyField 字段模型外键名称(本例为group),field2 为指向目标模型外键名称(本例为person)....ManyToManyField.db_table 默认情况下,关联表名称使用多对多字段名称和包含这张表模型名称以及Hash值生成,:memberShip_person_3c1f5 若要想要手动指定表名称...flight.reserve.remove(user) flight.save() 参考资料: django文档-模型字段-关联字段 django文档 - 执行查询 - 关联对象 django文档 -

1.7K10

Django 自定义过滤器创建和使用,以时间过滤器为例

这个项目里面自定义了过滤器,那么如何创建自定义过滤器呢? 模版过滤器必须要放在 app,并且这个 app必须要在 INSTALLED_APPS中进行安装。...本项目中python文件名字为print_timestamp.py 在创建了存储过滤器文件后,接下来就是在这个文件过滤器了。...过滤器实际就是python一个函数,只不过是把这个函数注册到模板库,以后在模板中就可以使用这个函数了。...但是这个函数参数有限制,第一个参数必须是这个过滤器需要处理值,第二个参数可有可无,如果有,那么就意味着在模板可以传递参数。并且过滤器函数最多只能有两个参数。...在写完过滤器后,再使用 django.template.Library对象注册进去。

1.4K20

Django 自定义过滤器创建和使用,以时间过滤器为例

这个项目里面自定义了过滤器,那么如何创建自定义过滤器呢? 模版过滤器必须要放在 app,并且这个 app必须要在 INSTALLED_APPS中进行安装。...本项目中python文件名字为print_timestamp.py 在创建了存储过滤器文件后,接下来就是在这个文件过滤器了。...过滤器实际就是python一个函数,只不过是把这个函数注册到模板库,以后在模板中就可以使用这个函数了。...但是这个函数参数有限制,第一个参数必须是这个过滤器需要处理值,第二个参数可有可无,如果有,那么就意味着在模板可以传递参数。并且过滤器函数最多只能有两个参数。...在写完过滤器后,再使用 django.template.Library对象注册进去。 ?

1.9K10

django 字段类型_access数据库类型是

大家好,又见面了,我是你们朋友全栈君。 字段类型 字段类型指使用Django ORM创建数据库时支持数据字段类型。...常用字段 (1) AutoField 自增整型字段,必填参数primary_key=True,则成为数据库主键,无该字段时,django会自动创建主键id字段。...:与模型相关类和on_delete选项,如果创建地柜关系(一个与自身具有多对一关系对象)则使用model.ForeignKey(‘self’,on_delete=models.CASCADE)。...如果需要在尚未定义模型创建关系,则可以使用模型名称,而不是模型对象本身。...Django会在DELETE CASCADE模拟 SQL约束行为,并删除包含ForeignKey对象。 **DO_NOTHING:**不采取行动。

3.8K30

Django模型model

前言 根据前几篇文章分享已经了解djangoWeb开发一般步骤为: 创建虚拟环境 安装django 创建项目 创建应用 在model.py创建模型类 定义视图 配置url 创建模板 1....定义模型类 在模型定义属性,会生成数据库表字段 django根据属性类型确定以下信息: 当前选择数据库支持字段类型 渲染管理表单时使用默认html控件 在管理站点最低限度验证 django...模型字段选项 通过字段选项,可以实现对字段约束 在字段对象时通过关键字参数指定 null:如果为True,Django 将空值以NULL 存储到数据库,默认值是 False blank:如果为True...模型类之间关系 关系类型包括 ForeignKey:一对多,将字段定义在多 ManyToManyField:多对多,将字段定义在两端 OneToOneField:一对一,将字段定义在任意一端...Django模型进行数据库查询操作接口,Django应用每个模型都拥有至少一个管理器 自定义管理器类主要用于两种情况 向管理器类添加额外方法创建管理器对象保存数据到数据库 class TestInfoManager

11910

Django小技巧22: 设计一个好模型

模型定义是对单个对象表示, 而不是公司集合. 这通常会导致混淆,因为我们倾向于通过数据库思考。模型最终被翻译成table.该表使用其复数形式命名....在 DJango ,我们可以通过Company.objects来访问集合. 我可以通过定义models.Manager重命名objects属性.... related_name 可以为反向关系定义一个有意义名称 经验法则: 如果你不确定related_name是什么, 请使用包含所定义ForeignKey模型复数形式....在数据库级别上, 该字段可以为 NULL, 但在应用程序级别上, 它是必填字段(前提你通过 Django 标准 Form 进行判断)。...这里是 Django 支持所有字段类型. 如果你对代码风格规范感兴趣, 可以读一读Django Coding Style. 当然也可以看一看Flake8.

87320

Django之Model操作数据库详解

Django ORM框架功能: 建立模型类和表之间对应关系,允许我们通过面向对象方式来操作数据库。 根据设计模型类生成数据库表格。 通过方便配置就可以进行数据库切换。...对应app目录下models.py 1、生成一个简单数据库表: 在未指定primary_key情况下,Django会默认创建一个id自增字段作为主键。...Admin字段提示信息 choices Admin显示选择框内容,用不变动数据放在内存从而避免跨表操作 :gf = models.IntegerField...表达式可以是简单值、对模型(或任何关联模型字段引用或者聚合表达式(平均值、总和等)。    ...Q查询 F查询专门取对象某列值操作,F作用:用来批量修改数据 #导入F from django.db.models import F #把table1表num列每一个值在基础加10

7K10

Django基础篇-表关联对象

反向查询 如果模型 1 有一个 ForeignKey,那么该 ForeignKey 所指向模型 2 实例可以通过一个管理器 返回前面有 ForeignKey 模型 1 所有实例。...从关联对象集中删除指定模型对象。(多对多) 删除是关系表数据 clear() 从关联对象集中删除所有的对象。...在关联任何一端,都不需要再调用 save() 方法。 直接赋值 ②多表查询 Django 提供一种强大而又直观方式来“处理”查询关联关系,它在后台自动帮你处理 JOIN。...若要跨越关联关系,只需使用关联模型字段名称,并使用双下划线分隔,直至你想要字段: 这种跨越可以是任意深度。 它还可以反向工作。若要引用一个“反向”关系,只需要使用该模型小写名称。...当你基于 ManyToManyField 或反向 ForeignKey 来过滤一个对象时,有两种不同种类过滤器。考虑 Department/Student 关联关系 (一对多关系)。 ?

1.2K40

Django教程 —— 模型类详解

引言 在之前 Django模型设计 简单介绍了如何定义模型类,在这篇中将做一个汇总。让大家更加了解Django模型类。...: 当前选择数据库支持字段类型 渲染管理表单时使用默认html控件 在管理站点最低限度验证 Django 会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后...Django 不会再创建自动增长主键列。...primary_key 若为True,则该字段会成为模型主键字段,默认值是False。 unique 如果为True, 这个字段在表必须有唯一值,默认值是False。...(BookType, on_delete=models.CASCADE, verbose_name=u'图书类型') 元选项 在模型定义类 Meta,用于设置元信息,使用 db_table 自定义表名字

1.7K20

python测试开发django-169.过滤器django-filter 入门使用

声明式语法在创建过滤器时为您提供了最大灵活性,但它相当冗长。...='icontains') class Meta: model = Product 过滤器有两个主要参数: field_name: 要过滤模型字段名称。...您可以使用 Django __语法遍历“关系路径”来过滤相关模型字段。 例如:manufacturer__name。 lookup_expr: 过滤时使用字段查找。...过滤器查找类型“精确”是隐式默认值,因此永远不会添加到过滤器名称。在上面的示例,发布日期的确切过滤器是`release_date`,而不是`release_date__exact`。...类fields序列项目Meta可能包括“关系路径”,使用 Django __语法过滤相关模型字段: class ProductFilter(django_filters.FilterSet)

2.2K20
领券