2013-02-14 99 views
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),其具有一个ForeignKey关系到MODELA根据附加的密钥相对应的条目。什么是最快和最有效的方式来实现这一目标?

通过在所有条目上循环执行此操作,将为ModelA-QuerySet中的每个条目创建数据库。

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

任何想法或提示任何人?

编辑:

好吧,更加精确。我已经有 ModelA的查询集。毕竟,我想有一个查询集,其中包含来自这两个表中的信息的一个查询集(或其他我可以在模板中迭代的其他东西)。

回答

0

我不知道我理解的问题,但也许:

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

0

你可以使用PK的名单由你。 MODELA查询集过滤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") 
0
modela = ModelA.objects.filter() 
modelb = ModelB.objects.filter() 

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

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

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