我在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()
答案 0 :(得分:0)
不幸的是,您的数据库设计不佳,获取计数的方法是使用此查询。
total_patients_beta = Diagnosis.objects.filter(
diagnosis_option__contains='b-thalassaemia syndromes').count()
这导致了像地中海贫血症状%'在大多数数据库中无法使用索引的查询。
您需要规范化数据库。在数据库列中存储逗号分隔值几乎绝不是一个好主意。虽然有些数据库最着名的是postgresql支持Array数据类型,但这些数据类型并不是为了搜索而设计的。
提示:数组不是集合;搜索特定的数组元素即可 数据库错误设计的标志。考虑使用单独的表格 每个项目的行都是一个数组元素。这会更容易 搜索,并可能为大量的更好地扩展 元件。
来源:http://www.postgresql.org/docs/9.1/static/arrays.html
您可能需要使用外键或与诊断有多对多关系的模型安装的DiagnosisOption。