在SearchQuerySet结果中获取外键对象Haystack

时间:2013-05-31 02:12:53

标签: django elasticsearch django-haystack

我有以下型号:

class EquipmentModel(models.Model):
    name = models.CharField(max_length=64, blank=False)
    description = models.CharField(max_length=64, blank=True)
    manufacturer = models.ForeignKey(Manufacturer, related_name="manufacturer")
    ....

以及以下索引:

class EquipmentModelIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr="name")
    manufacturer = indexes.CharField()

    def get_model(self):
        return EquipmentModel

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

和我的equipmentmodel_text.txt

{{object.name}} {{object.manufacturer}}

但是,每当我执行此查询时:

    results = SearchQuerySet().models(EquipmentModel).filter(name__startswith=request.GET['q'])[:5]

我只得到制造商的pk。我想要整个对象(或者至少是它的名字)。这可能吗?!

谢谢!

1 个答案:

答案 0 :(得分:7)

要实现这一目标,您在编制索引时必须已add the manufacturer's name到索引:

class EquipmentModelIndex(indexes.SearchIndex, indexes.Indexable):
    # your other fields
    manufacturer_name = indexes.CharField()

    def index_queryset(self, using=None):
        # using select_related here should avoid an extra query for getting
        # the manufacturer when indexing
        return self.get_model().objects.all().select_related('manufacturer')

    def prepare_manufacturer_name(self, obj):
        return obj.manufacturer.name
相关问题