我正在使用带有elasticsearch的haystack实现过滤功能。现在,我已经过滤了大部分字段,但我无法获得ManyToManyField
值。在浏览器中看起来像物理地址不是可读值:
我的模型中包含以下代码:
class StudyLevel(models.Model):
name_level = models.CharField(max_length=100, unique=True)
class Institution(models.Model):
.
.
level_study = models.ManyToManyField(StudyLevel, null=True)
.
.
在search_indexes中有以下内容:
class InstitutionIndex(indexes.SearchIndex, indexes.Indexable):
.
.
level_study = indexes.CharField(model_attr='level_study', faceted=True)
现在,在搜索html模板中存在问题:
{% if facets.fields.level_study %}
<div>
<h4>Study Level</h4>
<ul>
{% for level_study in facets.fields.level_study.all %}
<li><a href="{{ request.get_full_path }}&selected_facets=location_exact:{{ level_study.0|urlencode }}">{{ level_study.0 }}</a> ({{ level_study.1 }})</li>
{% endfor %}
</ul>
</div>
{% endif %}
如何解决这些问题?
答案 0 :(得分:2)
添加Facet字段以进行过滤
level_study = FacetMultiValueField()
然后用多对多关系中的项填充它:
def prepare_level_study(self, obj):
return [l.name for l in obj.level_study.all()]
并且不要忘记添加
.facet("level_study")
到你的SearchQuerySet()。