如何在Django Haystack响应中执行加入?

时间:2016-01-21 14:45:52

标签: django-haystack

我有一个干草堆模型,我试图通过外键上的字段(AKA Join)来订购。我知道如何使用典型的Django模型:

.order_by(' thefk__the_field&#39)

但这似乎与Haystack合作。我很好奇我会怎么做?

谢谢!

注意:

我故意没有添加Django标签,因为这个框架改变了原型Django查询行为(如上所述)。

1 个答案:

答案 0 :(得分:1)

外键字段必须是search_indexes.py文件中的index.SearchIndex,indexes.Indexable子类的属性。

一个例子是:

    class NoteTaker(models.Model):
        name = models.CharField()
        age = models.IntegerField()

    class Note(models.Model):
        notetaker = models.ForeignKey(NoteTaker, null=True)
        what_was_written = models.TextField()

然后在你的search_indexes.py中:

    class NoteSearchIndex(indexes.SearchIndex, indexes.Indexable):
         text = indexes.CharField(document=True, use_template=True)
         age = indexes.IntegerField(model_attr='notetaker__age')

{{3}}。

在某些情况下,例如反向FK,您必须使用def prepare_FOO,其中FOO是要编入索引的字段的名称。因此,如果您将NoteTaker编入索引而不是注意,则可以执行

    def prepare_the_notes_text(self, obj):
        if hasattr(obj, 'note'):
            return obj.note.what_was_written
        else:
            return None