1

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() 

このルールで検索を制限できますか?

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 に答える