连接/合并两个键上的两个查询集

2024-09-27 21:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想合并两个关键字上的两个查询集。你知道吗

class ModelA(models.Model)
  text = models.CharField(max_length=10)

class ModelB(models.Model)
  value = models.CharField(max_length=10)
  model_a = models.ForeignKey(ModelA)
  additionalkey =  models.CharField(max_length=10)  

假设我已经在所有ModelA对象上有一个queryset,并且我需要来自第二个模型(ModelB)的相应条目,该模型与ModelA具有ForeignKey关系,这取决于一个附加的键。实现这一目标的最快和最有效的方法是什么?你知道吗

如果对所有条目进行循环,那么ModelA QuerySet中的每个条目都会命中数据库。你知道吗

我的想法是一次获取所有ModelB对象,并将其与ForeignKey和additionalkey匹配的完整ModelA集连接/合并。你知道吗

有什么想法或暗示吗?你知道吗

编辑:

好吧,更准确地说。我已经有了ModelA的查询集。毕竟,我想要一个查询集,其中包含一个查询集中两个表的信息(或者我可以在模板中迭代的其他内容)。你知道吗


Tags: 对象text模型modelmodels条目关键字length
3条回答
modela = ModelA.objects.filter()
modelb = ModelB.objects.filter()

......................    

{% for a in modela %}
    {{....}}

    {% for b in a.modelb %}
        {{....}}
    {% endfor %}
{% endfor %}

我不确定我是否理解这个问题,但也许:

你知道吗ModelA.objects.all所有().filter(modelbuuu additionalkey='foo')

您可以使用modelA queryset中的主键列表来筛选modelB:

pk_list = model_a_queryset.values_list('pk', flat=True)
ModelB.objects.filter(model_a__pk__in=pk_list)

或者,您可以通过使用某种值筛选ModelB来获取第一个查询集:

ModelB.objects.filter(model_a__title="foo")

相关问题 更多 >

    热门问题