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

如何正确查询ManyToManyField列表中的所有对象(或另一个ManyToManyField)?

要正确查询ManyToManyField列表中的所有对象(或另一个ManyToManyField),您可以使用Django的查询API。以下是一个示例,假设您有两个模型,AuthorBook,它们之间存在一个多对多关系。

代码语言:python
代码运行次数:0
复制
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)
    authors = models.ManyToManyField(Author)

要查询一个特定的书籍中的所有作者,您可以使用以下查询:

代码语言:python
代码运行次数:0
复制
book = Book.objects.get(title='The Great Gatsby')
authors = book.authors.all()

要查询一个特定作者所写的所有书籍,您可以使用以下查询:

代码语言:python
代码运行次数:0
复制
author = Author.objects.get(name='F. Scott Fitzgerald')
books = author.book_set.all()

在这个例子中,book.authorsauthor.book_set都是ManyToManyField的实例,它们可以让您访问关联的对象。all()方法用于获取所有关联的对象。

如果您想要查询多个对象,您可以使用filter()方法来添加过滤条件。例如,要查询所有作者的书籍,您可以使用以下查询:

代码语言:python
代码运行次数:0
复制
books = Book.objects.filter(authors__name='F. Scott Fitzgerald')

这将返回所有名为“F. Scott Fitzgerald”的作者所写的书籍。

总之,要正确查询ManyToManyField列表中的所有对象(或另一个ManyToManyField),您可以使用Django的查询API,如all()filter()方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)

字段 模型 不可或缺且最为重要,就是字段集,它是一组数据库字段列表。字段被指定为类属性。...当某个对象想扩展自另一个对象时,最常用方式就是在这个对象主键上添加一对一关系。 OneToOneField 需要一个位置参数:与 model 关联类。...这是因为 Django 会对每个 SQL 查询数据库名称和列名称做重编码,至于如何编码视你所用数据库而定。...这取决于你如何使用 ‘%(class)s’ 来构造你反向名称。如果你没有这样做,Django 就会在验证 model (运行 syncdb) 时抛出错误。...所以,一般规则是: 如果你要镜像一个已有的 model 数据表,且不想涉及所有的原始数据表列,那就令 Meta.managed=False。

3.1K30

django 1.8 官方文档翻译:2-1-1 模型语法

choices 由二元组组成一个可迭代对象(例如,列表元组),用来给字段提供选择项。...这些选项帮助定义关系应该如何工作;它们都是可选。 多对多关系其他字段 处理类似搭配 pizza 和 topping 这样简单多对多关系时,使用标准ManyToManyField  就可以了。...当某个对象想扩展自另一个对象时,最常用方式就是在这个对象主键上添加一对一关系。 OneToOneField要一个位置参数:与模型关联类。...在模型添加class Meta是完全可选所有选项都不是必须所有元选项完整列表可以在模型选项参考找到。...查询集始终返回请求模型 也就是说,没有办法让DJango在查询Person对象时返回MyPerson对象。Person 对象查询集会返回相同类型对象

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

    执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象API,可以让你执行增删改查操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项详细内容,请见数据模型参考。...保存ForeignKey和ManyToManyField字段 更新ForeignKey字段方式和保存普通字段相同–只是简单地把一个类型正确对象赋值到字段。...举个例子,使用下面这个这个查询集返回前十个对象偶数次对象,就会运行数据库查询: >>> Entry.objects.all()[:10:2] 要检索单独对象,而非列表 (比如 SELECT foo...,又关联一个在2008年出版 entry (一个 entry 大标题含有 Lennon,同一个另一个 entry 是在2008年出版)。...如果 clear() 方法是可用,在迭代器(上例中就是一个列表)对象加入到 entry_set 之前,已存在于关联集合所有对象将被清空。

    4.3K20

    Django 模型继承 BaseModel

    这决定于你如何使用 '%(class)s' 和 '%(app_label)s' 构建关联名字和关联查询名。...比如,让我们用上面的 Place 类创建另一个子类,包含一个 ManyToManyField: class Supplier(Place): customers = models.ManyToManyField...QuerySet 仍会返回请求模型¶ 当你用 Person 对象查询时,Django 永远不会返回 MyPerson 对象。Person 对象查询结果集总是返回对应类型。...代理对象存在全部意义是帮你复用原 Person 提供代码和自定义功能代码(并未依赖其它代码)。不存在什么方法能在你创建完代理后,帮你替换所有 Person (其它)模型。...在 Django ,模型字段通常不允许这样做。如果一个非抽象模型基类有一个名为 author 字段,你就不能在继承自该基类任何类,创建另一个名为 author 模型字段属性。

    2.1K10

    【Django】聚合在Django详细解析以及运用在企业级项目里方法

    聚合 Django数据库抽象API描述了使用Django查询来添加、删除、查询和修改单个对象方法。然而,有时需要根据一组对象聚合您想要获得值。...例如,想计算所有在售图书平均价格。Django查询语法提供了一种描述所有藏书方法。 传递给聚合()参数描述了要计算聚合值。在此示例,将计算Book模型上价格字段平均值。...应用于公共模型字段任何过滤器()(exclude())都将具有约束被认为是聚合对象效果。 当使用annotate()子句时,过滤器具有约束注释对象计算效果。...例如,可以使用查询生成所有书籍注释列表。此列表标题以“Django”开头。...在第一个查询,注释优先于过滤器,因此过滤器不会影响注释。Distinct=True用于避免查询错误。 第二个查询查询每个出版商得分超过3图书数量。

    2K40

    Django笔记(十三)一对一,一对多,多对多之间查询

    目录 一对一 创建实例 choice类型如何获取具体值 如何获取一对一另一个表里面的数据 一对多 实体类 一对多代码(自己创建第三个表) 一对多代码(Django给你生成第三个表) 如何操作第三个表...,也就是这个UserProfile表里面的user_info字段,所有数据都不一样,不可能一样,因为是OneToOneField,一对一 choice类型如何获取具体值 字段是choice类型,如何获取到是对应值...,而不是键 这个表里面的这个字段,数据库保存是键1或者2 我想查询出来这个字段是具体值,如何写 也就是使用下划线, get_字段名_display() 这样就可以获取具体值...=100) 现在model里面只有两个类,但是在数据库里面却有3个表,另一个关联表是Django给你生成,就是通过ManyToManyField() 这个 如何操作第三个表 这个Django给生成第三个表...,在model文件里面是没有的,那么我们要如何操作这个表,也就是实现对这个表增删改查 增加 移除 编辑(覆盖) 查询 清空

    3K20

    Django之Model操作数据库详解

    (*book_obj)#为作者对象添加书籍对象集合 author_obj.book_set.remove(*book_obj)#删除指定作者对象所有的书籍 使用models.ManyToManyField...Q查询 F查询专门取对象某列值操作,F作用:用来批量修改数据 #导入F from django.db.models import F #把table1表num列每一个值在基础上加10...Q Q对象可以对关键字参数进行封装,从而更好应用多个查询 #查询table2表以"aaa"开头所有的title列 q1=table2.objects.filter(Q(title__startswith...开头,且不以"bbb"结尾所有title Q(title__startswith="aaa") & ~Q(title__endswith="bbb") Q对象可以与关键字参数查询一起使用,Q对象放在关键字查询参数前面...__gt=4 九、实例 1、DjangoORM如何判断查询结果是否为空,判断djangoorm为空 result= Booking.objects.filter() 方法一 .exists()

    7K10

    django 1.8 官方文档翻译: 2-1-3 元选项 (初稿)

    网站:http://python.usyiyi.cn/django/index.html 模型元选项 这篇文档阐述了所有可用元选项,你可以在你模型Meta类设置他们。...这包括: 如果你不声明它的话,会向你模型添加一个自增主键。为了避免给后面的代码读者带来混乱,强烈推荐你在使用未被管理模型时,指定数据表中所有的列。...对于带有managed=False模型测试,你要确保在测试启动时建立正确表。...例如,假设一个 Question 对象有很多相关联Answer对象,返回列表中含有相关联Answer对象主键: >>> question = Question.objects.get(id=1)...ordering Options.ordering 对象默认顺序,获取一个对象列表时使用: ordering = ['-order_date'] 它是一个字符串列表元组。

    81730

    Django分组聚合查询实例分享

    增删改 一对多:先一后多,外键可以为对象依赖表主键(publish and book) publish = Publish.objects.create() Book.objects.create(...在aggregate之前values操作没作用,被忽略 例: 所有书中最贵价格 dic = Book.objects.all().aggregate(high_price=max('price)...取字段值 values() 省略默认取所有分组字段和聚合字段,也可以自己定义(对非分组非聚合字段,该字段自动被变成分组字段) # 案例:每个出版社出版最贵价格高于50元出版社名与最高价格...连表查询,同时明确ManyToManyField字段,所以也支持ORM正向方向连表查询 — db_constraint=False断开关联可以在ForeignKeyManyToManyField任意一方完成...,更多相关Django分组聚合查询内容请搜索ZaLou.Cn以前文章继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

    1.8K10

    07.Django学习之model进阶

    理解它是如何工作将让你编写最高效代码。叫做queryset缓存空间 在一个新创建查询集中,缓存为空。...缓存并返回明确请求结果(例如,如果正在迭代查询集,则返回下一个结果)。接下来对该查询求值将重用缓存结果。 请牢记这个缓存行为,因为对查询集使用不当的话,它会坑你。...同时,还有可能两个结果列表并不包含相同数据库记录,因为在两次请求期间有可能有Article被添加进来删除掉。...查询集不会永远缓存它们结果。当只对查询部分进行求值时会检查缓存, 如果这个部分不在缓存,那么接下来查询返回记录都将不会被缓存。所以,这意味着使用切片索引来限制查询集将不会填充缓存。...where和tables都接受字符串列表所有where参数均为“与”任何其他搜索条件。

    2K30

    Django之QuerySet详解

    field参数是模型DateField名称。 kind参数应为"year","month""day"。 结果列表每个datetime.date对象被截取为给定类型。..."year" 返回对应该field所有不同年份值列表。 "month"返回字段所有不同年/月值列表。 "day"返回字段所有不同年/月/日值列表。...结果列表每个datetime.datetime对象被截取到给定类型。 order参数默认为'ASC',或者'DESC'。 它指定如何排序结果。...如果需要创建一个对象而该对象主键早已存在于数据库,IntegrityError异常将会被触发。 这个方法假设进行是原子操作,并且正确地配置了数据库和正确底层数据库行为。...如果未提供列表,则会返回查询集中所有对象

    2.3K20

    Django-model进阶(中介模型,查询优化,extra,整体插入)

    当你确实需要结果时,查询集 通过访问数据库来求值。 关于求值发生准确时间,参见何时计算查询集。 缓存机制 每个查询集都包含一个缓存来最小化对数据库访问。理解它是如何工作将让你编写最高效代码。...在一个新创建查询集中,缓存为空。首次对查询集进行求值 —— 同时发生数据库查询 ——Django 将保存查询结果到查询缓存并返回明确请求结果(例如,如果正在迭代查询集,则返回下一个结果)。...同时,还有可能两个结果列表并不包含相同数据库记录,因为在两次请求期间有可能有Article被添加进来删除掉。...查询集不会永远缓存它们结果。当只对查询部分进行求值时会检查缓存, 如果这个部分不在缓存,那么接下来查询返回记录都将不会被缓存。所以,这意味着使用切片索引来限制查询集将不会填充缓存。...where和tables都接受字符串列表所有where参数均为“与”任何其他搜索条件。

    1.6K70

    Django之ORM 外键关联(三)

    Django ORM 是创建 SQL 去查询和操作数据库一个 Python 式方式。...ForeignKey ManyToManyField ForeignKey 操作 正向查找 对象查找(跨表) 语法: 对象.关联字段.字段 示例: 字段查找(跨表) 语法: 关联字段__字段...示例: 反向操作 对象查找 语法: obj.表名_set 示例: 字段查找 语法: 表名__字段 示例: ManyToManyField class RelatedManager "关联管理器...它存在于下面两种情况: 外键关联反向查询 多对多关联 当 . 点后面的对象可能存在多个时候就可以使用以下方法。...举个例子: ForeignKey 字段没设置 null=True 时, 没有 clear() 和 remove() 方法 对于所有类型关联字段,add()、create()、remove()、clear

    2.2K50

    基于Django OneToOneField和ForeignKey区别详解

    : 参数 功能 limit_choices_to 通过一个限制对字段信息某一可能选项进行约束,可以通过字典,函数或者查询值来设置 related_name 可以指定关联类在本类名称,通过这一参数可以用两个字段名引用同一个类...,通过这个名称父类可以取得子类值,默认为字段名 related_query_name 用于filter函数过滤和values函数 to_field 关系关联相关对象名称 db_constraint...控制在数据库是否应该建立这一字段约束 swappable 用于控制这一字段对于可交换类模型行为 ManyToManyField 同样在源码我们可以找到针对ManyToManyField的如下定义...toppings = models.ManyToManyField(Topping) 在示例代码,Pizza类toppings字段由ManyToManyField与Toppings关联,我们可以由生活常识得出一片披萨上面会有很多种类佐料...ManyToManyField还有以下参数可以选择: 参数 功能 related_name 同ForeignKey,可以指定关联类在本类名称 related_query_name 同ForeignKey

    2.4K20

    Django 系列博客(十三)

    to 设置要关联表 to_field 设置要关联字段 related_name 反向查询时,使用字段名,用于代替原反向查询'表名_set'。...一对一关联关系多用在当一张表不同字段查询频次差距过大情况下,将本可以存储在一张表字段拆开放置在两张表,然后将两张表建立一对一关联关系。...on_delete 级联删除选项 ManyToManyField 用于表示多对多关联关系。在数据库通过第三张表来建立关联关系。...to 设置要关联表 related_name 反向查询时,使用字段名,用于代替原反向查询'表名_set'。 symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作字段。...("self", symmetrical=False) 此时,person 对象可以使用 person_set 属性进行反向查询

    1.1K30

    Django学习笔记之Django ORM Aggregation聚合详解

    在当今根据需求而不断调整而成应用程序,通常不仅需要能依常规字段,如字母顺序创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序。Djngo聚合就能满足这些要求。...(评分大于3分)出版商列表。...但是第一个查询注解包含其该出版商发行所有图书总数;而第二个查询注解只包含出版过好书出版商所发行好书(评分大于3分)总数。在第一个查询,注解在过滤器之前,所以过滤器对注解没有影响。...就不是在原始 QuerySet 返回结果对每个对象添加注解,而是根据定义在 values() 从句中字段组合对先结果进行唯一分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得...值来分组Item对象,然后在每个分组得到id值总数。

    1.1K20
    领券