2017-08-17 68 views
0

我有一个相关值的数据框,我需要一起查询我的对象。我可以遍历这个相关值列表并将它们提供给我的对象,然后将它们附加到列表中,但是这给了我一个单独的查询集列表。有没有一种方法,我可以一起阅读我的元组没有循环,并获得一个单一的查询集?如何让多个元组获取单个Django查询集

相关的值是hts_run和variant。在这种情况下,相同的变量值具有多个hts_run值。我的数据帧已经删除了不需要的hts_run值,所以我有正确的变量对应于正确的hts_run值。

,这里是我的时刻代码:

var_obj = [] 
for i, row in df.iterrows(): 
    v_obj = row['variant'] 
    var_obj.append(VariantSampleRun.objects.filter(sample=current_sample, 
    hts_run=row['run']).select_related('variant').order_by('variant')) 

但是我需要一个var_obj queryset的其他功能。我曾尝试使用“链”,合并他们,但我想

回答

1

,如果我理解你可以使用__in过滤器,像这样:

runs = [row['run'] for i, row in df.iterrows()] 
var_obj = VariantSampleRun.objects.filter(sample=current_sample, 
    hts_run__in=runs).select_related('variant').order_by('variant') 
+0

不幸的是没有。我基本上有两个运行:run1和run2。所有的变体都在两次运行中找到,我只是选择了我想要的变体。例如:变体1 - RUN2, VARIANT1 - RUN2 VARIANT2 - RUN1 VARIANT2 - RUN2 VARIANT3 -run1 VARIANT3 - RUN2 我选择,这样在我想运行的变种是在数据帧: VARIANT1 - run1 variant2 - run1 variant3 - run2 因此,当我执行该查询时,我仍然为每次运行获取所有变体,因为我正在查询两次运行的所有变体 – trouselife

0

代替df.iterrows的(地)你只是执行 运行= model.objects.filter()。values_list( '运行',平=真) 然后传递元组到下一个过滤器等过滤器 (hts_run__in =运行)