Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django ForeignKey反向查询

Django ForeignKey反向查询
EN

Stack Overflow用户
提问于 2019-10-30 09:15:20
回答 2查看 73关注 0票数 0

我有3个与FK相关的模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MainEvent(models.Model):
    name = models.CharField(max_length=512, blank=True)

class Event(models.Model):
    main_event = models.ForeignKey(MainEvent, blank=True, null=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=512, blank=True)

class SubEvent(models.Model):
    event = models.ForeignKey(Event, blank=True, null=True, on_delete=models.CASCADE)
    done = models.BooleanField(default=False)

我需要的是在包含相关事件和子事件的模型MainEvent上创建单个反向查询。我将把这个和q一起用来过滤多个选项。

例如:

有2个MainEvents,每个事件有2个或更多的事件,每个事件有2个或更多的子事件。我正在尝试创建单个查询,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 [MainEvent_1:[Event_1:[Subevent_1,Subevent_2,...],Event_2:[Subevent_5,...]], MainEvent_2:[Event_2:[Subevent_2,..]]]

目前,我正在创建保存所需输出的字典,但在这种情况下,我不能使用像&或|这样的Q关系。

最后,我在模板表中使用此数据来显示所有事件并对其进行过滤:

所需的表结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main event_1:
event_1:
subevent_1
subevent_2
event_2:
subev...
...........
main event_2:
event_2:
subev....

谢谢您抽时间见我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-30 11:26:02

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MainEvent.objects.filter(Q(event__subevent__done=True) | Q(event__subevent__done=False))

您可以使用类似下面的代码,然后使用. inside循环访问子事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for item in query:
    for i in item.event_set.all():
        for j in i.subevent_set.all():
            print(i.name)
            print(j.done)
票数 1
EN

Stack Overflow用户

发布于 2019-10-30 10:23:25

不能在一个查询中完成此操作,但可以使用prefetch_related()在三个查询中完成此操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MainEvent.objects.prefetch_related('event_set', 'event_set__subevent_set').all()

如果所有MainEvents都有Events,所有Events都有SubEvents,您可以通过从SubEvents开始并在代码中进行分组,在一个查询中完成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SubEvent.objects.select_related('event', 'event__main_event').all()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58621968

复制
相关文章
Django之ForeignKey和ManyToManyField多表查询
多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案.
菲宇
2022/12/21
1.8K0
python测试开发django-37.外键(ForeignKey)查询
前面在admin后台页面通过设置外键,可以选择下拉框的选项,本篇主要讲解关于外键(ForeignKey)的查询
上海-悠悠
2019/05/06
1.6K0
python测试开发django-37.外键(ForeignKey)查询
django Foreignkey 之 on_delete
on_delete 指的是通过 ForeignKey 连接起来的当前对象被删除后,外键字段进行的操作。
卓越笔记
2023/02/18
2520
django-ForeignKey,OneToOneField,ManyToManyField
进入到django自带的related.py中,可以看到 1.ForeignKey 初始化的参数有: to, on_delete, related_name=None, related_query_name=None,limit_choices_to=None, parent_link=False, to_field=None, db_constraint=True, **kwargs 假设我们有: class Author(models.Model): author = models.Char
西西嘛呦
2020/08/26
7170
django2.0+反向查询抛异常处理
一.错误信息 AttributeError: 'RelatedManager' object has no attribute 'lrc' #其中RelatedManager为关键字 二.反向查询的字段 obj.lrc_set.lrc #语法没有问题 #然后我打印obj.lrc_set发现他是RelatedManager对象而不是我想要的lrc对象 #所有我查了一堆文献没找到方法,然后我就尝试.first()就解决了 三.异常处理 obj.lrc_set.first().lrc #可能是2.0有点区别
小小咸鱼YwY
2020/06/19
4110
Django admin Foreignkey ManyToMany list_display展示
对于上面的model,如果要在django admin中展示ghosts信息,那么在list_display中直接加入’ghosts’ 会报下面的错误:The value of ‘list_display[1]’ must not be a ManyToManyField.
obaby
2023/02/24
7670
Django admin ForeignKey 字段增加搜索选择框
当 ForeignKey 数据过多,手动在后台添加时不方便找到自己的想要数据,遂想要一个可以搜索检索数据功能。
卓越笔记
2023/02/18
1.4K0
Django admin ForeignKey 字段增加搜索选择框
ORM常用字段介绍
2. 在Django项目的__init__.py文件中写如下代码,告诉Django使用pymysql模块连接MySQL数据库:
全栈程序员站长
2022/07/21
2.5K0
ORM常用字段介绍
Django之ORM字段和参数
字段 常用字段 ---- AutoField                                                                                                                                                                                                                                         
人生不如戏
2018/04/12
2.3K0
Django之contenttypes的应用
contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。
人生不如戏
2019/02/13
7960
Django之contenttypes的应用
Django ORM 多表操作
ps:外键字段不需要写表名_id后面的_id,ORM创建的时候自动添加了_id,以及外键以虚拟字段的形式存在
HammerZe
2022/03/25
1.8K0
Django ORM 多表操作
Django外键(ForeignKey)操作以及related_name的作用
之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息
全栈程序员站长
2022/09/10
2K0
Django外键(ForeignKey)操作以及related_name的作用
django 模型关系
比如汽车和制造商的例子,一辆汽车只能属于一个制造商,但是一个制造商有多辆汽车,这个关系,用Django的Model来表示,就是
程序员同行者
2018/08/16
1.4K0
django自带的contentType表
    contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。
changxin7
2019/12/19
1.3K0
Django 系列博客(十三)
int 自增列,必须填入参数 primary_key=True。当 model 中如果没有自增列,则会自动创建一个列名为 id 的列。
py3study
2020/01/22
1.1K0
Django官方文档小结(一) -- Models模型
在生成数据库时,Django追加"_id"字段名称来创建其数据库列名,可以通过指定显式更改此内容db_column
Autooooooo
2020/11/09
7870
Django之ContentType详解
contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。 
KEVINGUO_CN
2020/03/17
5540
点击加载更多

相似问题

来自ForeignKey的django反向关系查询

13

从反向ForeignKey关系输出的Django查询

21

ForeignKey反向关系查询

12

Django:定义反向ForeignKey的名称

10

Django反向ForeignKey查找返回None

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文