1

我已经成功地让 django-haystack 与 elasticsearch 一起工作。在下面的示例中,我可以搜索任何销售项目,它会显示在结果中。

我创建了一个索引:

class SalesItemIndex(SearchIndex, Indexable):
    text = CharField(document=True, use_template=True)
    item_description = CharField(model_attr='item_description')

    def get_model(self):
        return SalesItem

    def index_queryset(self):
        """Used when the entire index for model is updated."""
        return self.get_model().objects.all()

模型销售项目:

class SalesItem(models.Model):        
    item_description    = models.CharField(_(u"Item Description"), max_length=40)
    company             = models.ForeignKey(Company)
    def __unicode__(self):
        return self.item_description

问题是,用户可以搜索所有的销售项目,甚至那些不属于他公司的。

通常,salesitems = SalesItem.objects.all()我宁愿使用它来确保用户只看到属于他公司的物品,而不是全部退回:

profile = request.user.get_profile() 
sales_items = profile.company.salesitem_set.all() 

我可以用这条规则限制我的搜索吗?

4

1 回答 1

1

您也可以将公司 ID 编入索引SalesItemIndex

class SalesItemIndex(SearchIndex, Indexable):
    ...
    company = IntegerField(model_attr='company_id')

并直接过滤SearchQuerySet

sales_items = salesitem_set.filter(company=profile.company_id)

于 2012-08-28T13:26:00.813 回答