在两个键上连接/合并两个QuerySet

时间:2013-02-14 12:11:08

标签: python django

我想在两个键上合并两个QuerySet。

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)的相应条目,该模型具有到ModelA的ForeignKey-RelationShip,具体取决于附加键。实现这一目标的最快,最有效的方法是什么?

对所有条目执行此操作会在ModelA-QuerySet中为每个条目命中数据库。

我的想法是立即获取所有ModelB对象并将其与完整的ModelA-set连接/合并,其中ForeignKey和附加键适合。

任何人的想法或暗示?

编辑:

好的,更确切地说。我已经一个ModelA的查询集。毕竟我想在一个查询集中使用来自两个表的信息的查询集(或者我可以在模板中迭代的其他内容)。

3 个答案:

答案 0 :(得分:0)

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

ModelA.objects.all()。过滤器(modelb__additionalkey = '富')

答案 1 :(得分:0)

您可以使用modelA queryset中的pk列表来过滤模型:

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

或者您可以通过使用某种值过滤模型B来获取第一个查询集:

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

答案 2 :(得分:0)

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

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

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

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