2012-08-28 64 views
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() 

請問我可以限制我的這個規則搜索?

回答

1

你可以指數公司ID在SalesItemIndex還有:

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

而且在SearchQuerySet直接過濾它:

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

+0

這聽起來前途。我的假設是否正確,我需要推出自己的SearchForm才能訪問SearchQuerySet並執行您的建議? – Houman

+0

@Kave如果你的意思是'haystack.forms.SearchForm',它支持'__init__'中的'searchqueryset'。所以像'SearchForm(searchqueryset = sqs)'就好了。另外,爲了方便起見,我想在相應的Django模型上定義一個'get_searchqueryset()'方法。 – okm

相關問題