我已成功使用elasticsearch进行django-haystack工作。 在下面的示例中,我可以搜索任何销售项目,它将显示在结果中。
我创建了一个索引:
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()
模型SalesItem:
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()
我可以使用此规则限制搜索吗?
答案 0 :(得分:1)
您也可以在SalesItemIndex
中为公司ID编制索引:
class SalesItemIndex(SearchIndex, Indexable):
...
company = IntegerField(model_attr='company_id')
并直接在SearchQuerySet
:
sales_items = salesitem_set.filter(company=profile.company_id)