1
我已經用elasticsearch成功製作了django-haystack。 在下面的例子中,我可以搜索任何銷售項目,並且它會顯示在結果中。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()
我寧願用這個來確保用戶只能看到該belons到他的公司的項目:
profile = request.user.get_profile()
sales_items = profile.company.salesitem_set.all()
請問我可以限制我的這個規則搜索?
這聽起來前途。我的假設是否正確,我需要推出自己的SearchForm才能訪問SearchQuerySet並執行您的建議? – Houman
@Kave如果你的意思是'haystack.forms.SearchForm',它支持'__init__'中的'searchqueryset'。所以像'SearchForm(searchqueryset = sqs)'就好了。另外,爲了方便起見,我想在相應的Django模型上定義一個'get_searchqueryset()'方法。 – okm