我如何得到" ManyToManyField"在Haystack的搜索过滤器中的值?

时间:2014-03-17 21:43:26

标签: django django-models django-haystack

我正在使用带有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 }}&amp;selected_facets=location_exact:{{ level_study.0|urlencode }}">{{ level_study.0 }}</a> ({{ level_study.1 }})</li>
                    {% endfor %}
                    </ul>
                </div>
            {% endif %}

如何解决这些问题?

1 个答案:

答案 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()。