2016-01-21 70 views
1

我有一個乾草堆模型,我試圖通過外鍵上的字段(AKA加入)進行排序。我知道如何做到這一點使用一個典型的Django模型:如何在Django Haystack Response上執行Join?

.order_by(「thefk__the_field」)

但這似乎並不用草堆合作。我很好奇我將如何去做這件事?

謝謝!

注:

我特意由於這個框架改變了原型Django的查詢行爲(如上所述)沒有添加Django的標籤。

回答

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') 

docs explain that here

在某些情況下,如反向FK,您必須使用def prepare_FOO其中FOO是被索引字段的名稱。所以,如果你索引NoteTaker而不是Note,你可以做

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