【问题标题】:Django view: Count data from model contained in [ ]Django 视图:计算 [] 中包含的模型中的数据
【发布时间】:2016-05-18 10:13:34
【问题描述】:

我正在使用 django 1.8。

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

[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()

【问题讨论】:

  • 您是否遇到任何错误? diagnosis_option 是什么类型的字段?
  • @AKS 不,我没有收到任何错误。我只得到0diagnosis_option 的类型是 models.CharField( max_length=150)
  • 我不明白。如果是CharField,那你为什么会有list 值呢?
  • @AKS 因为我的 gui 中有多项选择,并且可以存储多个值。
  • 我想知道您是否可以将list 值存储在CharField 中?

标签: python django django-views django-queryset


【解决方案1】:

临时修复

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

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

这会导致无法在大多数数据库上使用索引的 LIKE '%b-thalassaemia%' 查询。

真正的修复

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

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

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

您可能需要一个名为 DiagnosisOption 的模型,该模型具有外键或与诊断的多对多关系。

【讨论】:

  • 感谢您的解决方案和建议!我真的很感激!
  • 很高兴能帮上忙
猜你喜欢
  • 2013-02-17
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2013-02-02
相关资源
最近更新 更多