Я пытался использовать огранку с Haystack на поле многие ко многим. Я перепробовал много вариантов, чтобы в итоге окончить дорогу. Я могу заставить его работать (по-видимому), как показано ниже через оболочку. Однако при внедрении в шаблон граненые поля не отображаются.
Извлечение из Джанго Шелл
- из haystack.query import SearchQuerySet
- sqs = SearchQuerySet (). Facet ('type')
- sqs.facet_counts ()
- {'fields': {'type': [('Soccer', 2), ('Basketball', 1), ('Golf', 1), ('Swim', 1)]}, 'date ': {},' query ': {}}
Поиск Index.py
class EventIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
name = indexes.CharField(model_attr='name')
owner = indexes.CharField(model_attr='user')
created_on = indexes.DateTimeField(model_attr='created_on')
type = indexes.MultiValueField(faceted=True)
def get_model(self):
return Event
def prepare_type(self, obj):
return [(t.name) for t in obj.type.all()]
def index_queryset(self, using=None):
return self.get_model().objects.prefetch_related('type').all()
Template
<!-- Begin faceting. -->
<div>
{% if facets.fields.type %}
<h5>Categories</h5>
{# Provide only the top 5 categories #}
{% for category in facets.fields.type|slice:":5" %}
<a href="{{ request.get_full_path }}&selected_facets=type_exact:{{ type.0|urlencode }}">
{{ type.0 }}
</a>
({{ type.1 }})
{% endfor %}
{% else %}
<p>No categories.</p>
{% endif %}
</div>
event_text.txt
{{ object.name }}
{{ object.description }}
{% for type in event.type.all %}
{{ event.type }}
{% endfor %}
Я должен видеть различные типы как аспекты (футбол, баскетбол и т. Д.). Вместо этого я получаю только пустое значение.
Категория
()
Я полагаю, что что-то не так в моем шаблоне, я думаю, что я должен пройтись по Event.type, но я не могу понять это ...
Спасибо!