2016-01-21 34 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