elasticsearch-2.0,Python,Django,Django Haystack,elasticsearch 2.0" /> elasticsearch-2.0,Python,Django,Django Haystack,elasticsearch 2.0" />

Python 如何在django haystack中解决相关模型中的过滤问题

Python 如何在django haystack中解决相关模型中的过滤问题,python,django,django-haystack,elasticsearch-2.0,Python,Django,Django Haystack,elasticsearch 2.0,我有以下型号: class Note(models.Model): user = ForeignKey(User) topic = CharField(max_length=20) class Referral(models.Model): recipient = ForeignKey(User, related_name=referral_rcvd) giver = ForeignKey(User, related_name=referral_given)

我有以下型号:

class Note(models.Model):
    user = ForeignKey(User)
    topic = CharField(max_length=20)

class Referral(models.Model):
    recipient = ForeignKey(User, related_name=referral_rcvd)
    giver = ForeignKey(User, related_name=referral_given)
    about = CharField(max_length=20)
以及
搜索索引.py
中的以下内容:

class NoteIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)
    topic = indexes.CharField(model_attr='topic')
我想在模板中看到的是:

Search for: <topic>

Results:
<ul>
<topic> <topic.user.username> <topic.user.referral_rcvd.filter(about=topic)
</ul>
但这在html模板中不起作用:

{% for result in object_list %}
   {{ result.object.user.referral_rcvd.filter(about=i.object.topic).count() }}
{% endfor %}
{% for result in object_list %}
   {{ result.referral }}
{% endfor %}

如果它在shell中工作,如何使它在模板中工作?谢谢

终于解决了!我所做的是使用
prepare\u FOO
方法:

class NoteIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)
    topic = indexes.CharField(model_attr='topic')
    referral_count = indexes.IntegerField()

    def prepare_referral_count(self, obj):
        topic_name = Note.objects.get(pk=obj.pk).topic
        return obj.user.referral_rcvd.filter(about=topic_name).count()
然后我运行了
python manage.py update\u index
,并将以下内容放在我的模板中:

{% for result in object_list %}
   {{ result.object.user.referral_rcvd.filter(about=i.object.topic).count() }}
{% endfor %}
{% for result in object_list %}
   {{ result.referral }}
{% endfor %}
它不是
result.object.reflection
,因为我们引用的是索引中的某些内容