【问题标题】:How to get one single django queryset by giving multiple tuples如何通过提供多个元组来获得一个单一的 Django 查询集
【发布时间】:2018-01-25 18:31:14
【问题描述】:

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

相关的值是 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 查询集。我曾尝试使用“链”来合并它们,但我在想

【问题讨论】:

    标签: python mysql django pandas django-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')
    

    【讨论】:

    • 很遗憾没有。我基本上有两次运行:run1 和 run2。在两次运行中都找到了所有变体,我只是选择了我想要的变体。例如:variant 1 - run2, variant1 - run2 variant2 - run1 variant2 - run2 variant3 -run1 variant3 - run2 我选择了这样我想要的运行中的变体在数据框中: variant1 - run1 variant2 - run1 variant3 - run2 所以当我进行该查询时,我仍然会为每次运行获取所有变体,因为我正在查询两次运行中的所有变体
    【解决方案2】:

    你只是执行而不是df.iterrows()

    runs=model.objects.filter().values_list('run', flat=True) 
    

    然后将元组传递给下一个过滤器

    filter(hts_run__in=runs)
    

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2020-11-12
      • 2011-09-14
      • 2011-06-16
      • 1970-01-01
      • 2013-09-06
      • 2013-03-13
      • 1970-01-01
      相关资源
      最近更新 更多