Django视图:从[]中包含的模型计算数据

时间:2016-05-18 10:13:35

标签: python django django-views django-queryset

我在django 1.8工作。

diagnosis_option中名为Diagnosis的列包含以下内容:

[u'b-thalassaemia syndromes']
[u'b-thalassaemia syndromes', u'Sickle cell syndromes']
[u'b-thalassaemia syndromes']
[u'Sickle cell syndromes']
[u'Red cell enzyme disorders']

我在views.py中使用了以下代码,但我没有得到任何结果。我如何计算包含字符串b-thalassaemia syndromes的所有字段?

total_patients_beta = Diagnosis.objects.filter(diagnosis_option__in='b-thalassaemia syndromes').count()

1 个答案:

答案 0 :(得分:0)

临时修复

不幸的是,您的数据库设计不佳,获取计数的方法是使用此查询。

total_patients_beta = Diagnosis.objects.filter(
  diagnosis_option__contains='b-thalassaemia syndromes').count()

这导致了像地中海贫血症状%'在大多数数据库中无法使用索引的查询。

Real Fix

您需要规范化数据库。在数据库列中存储逗号分隔值几乎绝不是一个好主意。虽然有些数据库最着名的是postgresql支持Array数据类型,但这些数据类型并不是为了搜索而设计的。

  

提示:数组不是集合;搜索特定的数组元素即可   数据库错误设计的标志。考虑使用单独的表格   每个项目的行都是一个数组元素。这会更容易   搜索,并可能为大量的更好地扩展   元件。

来源:http://www.postgresql.org/docs/9.1/static/arrays.html

您可能需要使用外键或与诊断有多对多关系的模型安装的DiagnosisOption。