首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django中将两个查询合并在一个查询中

在django中将两个查询合并在一个查询中
EN

Stack Overflow用户
提问于 2022-09-11 20:07:22
回答 1查看 25关注 0票数 0

我有一个模型如下:

代码语言:javascript
复制
class ModelA(models.Model):
    id = models.CharField()

class ModelB(models.Model):
    name = models.CharField()
    base = models.Boolean(default=False)
    modela = models.ForeignKey(ModelA)

在ModelB中,我们有如下记录:

代码语言:javascript
复制
id          name           base        modela
------------------------------------------------
1          solution_base    True        X2ZQ
2          solution_x       False       X2ZQ
3          solution_base    True        ALSB
4          solution_z       False       ALSB
5          solution_base    True        5YET
6          solution_c       False       5YET
7          solution_base    True        PIAT
...        ...              ...         ...

如您所见,每条记录都有自己的基本副本,可以通过惟一的模型-- foreignkey来区分。我所需要的是,通过给定的正常解决方案id(例如solution_x),我需要查询它的基本等效基对象(其中模型id是相同的)。到目前为止,我所做的是:

代码语言:javascript
复制
modela_id = ModelB.objects.filter(id=modelb_pk).select_related('modela_id').values_list('modela_id', flat=True)
modelb_solution_base_id = ModelB.objects.filter(modela_id=modela_id[0]).filter(base=True).select_related('modela_id').values_list('id', flat=True)

我想应该有一个使用prefetch_related(Prefetch())合并这两者的解决方案,但我不知道如何使用。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-11 23:31:57

我认为你让这件事变得更复杂了-- Django ORM为你处理了很多事情,这要归功于外键关系。给定ModelB的ID,另一个ModelB的ID具有相同的ModelA,但base=True只是:

代码语言:javascript
复制
 ModelB.objects.get(id=modelb_pk).modela.modelb_set.get(base=True).id

为什么要这么做?

因为ModelA.

  • Conversely,与ModelA有多对一的关系,所以我们可以在ModelB实例上调用.modela以获得对应的ModelA实例,调用.modelb_set返回与ModelA相关的所有ModelB记录。

  • 我们可以像调用ModelB.objects.

那样在modelb_set上调用.get/.filter

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73682327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档