0

我想在两个键上合并两个查询集。

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 对象的查询集,并且我需要来自第二个模型 (ModelB) 的相应条目,该第二个模型 (ModelB) 具有到 ModelA 的 ForeignKey-RelationShip,具体取决于附加键。实现这一目标的最快和最有效的方法是什么?

对所有条目执行此操作将针对 ModelA-QuerySet 中的每个条目访问数据库。

我的想法是一次获取所有 ModelB 对象并将其与完整的 ModelA 集加入/合并,其中 ForeignKey 和附加键适合。

任何想法或提示任何人?

编辑:

好的,更准确地说。我已经有一个 ModelA 的查询集。毕竟,我希望有一个查询集,其中包含来自一个查询集中两个表的信息(或者我可以在模板中迭代的其他东西)。

4

3 回答 3

0
modela = ModelA.objects.filter()
modelb = ModelB.objects.filter()

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

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

    {% for b in a.modelb %}
        {{....}}
    {% endfor %}
{% endfor %}
于 2013-02-14T13:06:31.143 回答
0

您可以使用模型 A 查询集中的 pk 列表来过滤模型 B:

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")
于 2013-02-14T12:26:44.627 回答
0

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

ModelA.objects.all().filter(modelb__additionalkey='foo')

于 2013-02-14T12:24:04.613 回答