2016-10-22 1 views
4

私はdjango-oscar + Solr + haystackを使用します。これらのモデル行だけをどのようにインデックスするか、some_field = some_value?

*===============================================================================================================* 
| id | partner_sku|price_currency|price_excl_tax|num_in_stock|date_created|date_updated|partner_id|product_id| 
|"10451"|"S0010436" | "USD"  | 74.00  | 20  |'some_date' |'some_date' |  1 | 5992  | 
|"10452"|"S0010436" | "USD"  | 80.00  |  0  |'some_date' |'some_date' |  2 | 5992  | 
*===============================================================================================================* 

partner_id=2の行だけにインデックスを付ける必要があります。 index_querysetは、他のパートナーもインデックスを作成しているため、私が必要とすることをしません。

class ProductIndexes(CelerySearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(
      document=True, use_template=True, 
      template_name='search/indexes/cpu/item_text.txt') 

    upc = indexes.CharField(model_attr="upc", null=True) 
    title = indexes.CharField(model_attr='title', null=True) 

    # Fields for faceting 
    product_class = indexes.CharField(null=True, faceted=True) 
    category = indexes.MultiValueField(null=True, faceted=True) 
    partner = indexes.MultiValueField(null=True, faceted=True) 
    price = indexes.FloatField(null=True, faceted=True) 
    vendor = indexes.CharField(null=True, faceted=True) 
    rating = indexes.IntegerField(null=True, faceted=True) 
    num_in_stock = indexes.BooleanField(null=True, faceted=True) 

    # Spelling suggestions 
    suggestions = indexes.FacetCharField() 

    date_created = indexes.DateTimeField(model_attr='date_created') 
    date_updated = indexes.DateTimeField(model_attr='date_updated') 

    def get_model(self): 
     return get_model('catalogue', 'Product') 

    def index_queryset(self, using=None): 
     return self.get_model().objects.filter(stockrecords__partner_id=2).order_by('-num_in_stock') 

python manage.py rebuild_index私は必要なインデックスを実装するためにどのように

を実行していますか?これは同じ問題であると仮定すると、

+0

あなたにとってはうまくいかない限り、あなたのソリューションは間違っているようです。あなたの試みが何であるか、なぜ、どのように達成するのかを理解してください。利用可能なコードだけで、「見える/考えている」という概念に基づいて有用なものを提案することは問題です。 Djangoのすべてのものをここに投稿することは不可能だと理解していますが、 – agg3l

答えて

0

:あなたはBooleanFieldあるnum_in_stockでフィルタしようとしているとしてdjango oscar github issue 2169 ????

私はIntegerFieldとにこれを変更し、そのように `prepare_num_in_stock機能を追加することをお勧めしたい:

def prepare_num_in_stock(self, obj) 
    # define get_local_stock as you please 
    return int(obj.get_local_stock()) 

は、この情報がお役に立てば幸いです。

+0

'BooleanField'について。はい、変です。このコードは私が以前の開発者から得たものです。 – TitanFighter

関連する問題