queryset过滤器只根据第一行 - Django

时间:2018-04-17 02:20:00

标签: python django

在Django中使用 queryset.filter()来过滤数据。但它不会返回我所期望的。谁能纠正我。
单个数据单元格如下所示(每行以\ n分隔)

  
      
  1. こちらは1行です。(0.57)\ n
  2.   
  3. こちらは2行です。(0.67)\ n
  4.   
  5. こちらは3行です。(0.77)\ n
  6.   
  7. こちらは4行です。(0.87)\ n
  8.   
  9. こちらは5行です。(0.697)
  10.   

代码如下

queryset = queryset.filter(predicted_result__regex = r"\A.*", predicted_result__contains='(0.5') |\
                   queryset.filter(predicted_result__regex = r"\A.*", predicted_result__contains='(0.6') |\
                   queryset.filter(predicted_result__regex = r"\A.*", predicted_result__contains='(0.7')

输出:
这将考虑所有5条线不仅是第一条线。

目标:
只有得分的第一行(括号内) 0.5到0.8。所有其他行都应该省略。

预期结果:

  
      
  1. こちらは1行です。(0.57)\ n
  2.   

1 个答案:

答案 0 :(得分:0)

您当前查询的问题在于您的单个数据单元'目前是一个字符串。使用正则表达式来计算可能会或可能不会预期的内容仍将返回整个字符串' True'。你应该分开'文本'来自' float'值以便更有效地查询。

class Model(model):
    descriptor = models.CharField()
    value = models.FloatField()

现在您可以实际查询'值'在它自己的。

如果由于某种原因无法更改模型,则需要执行多个查询并使用union / intersection / difference方法。

fives_queryset = queryset.filter(predicted_result__contains'(0.5')
sixes_queryset = queryset.filter(predicted_result__contains'(0.6')
sevens_queryset = queryset.filter(predicted_result__contains'(0.7')

result_queryset = union(fives_queryset, sixes_queryset, sevens_queryset)