2012-08-13 12 views
6

क्या SeachQuerySet के रूप में मॉडल के केवल फ़िल्टर किए गए हिस्से का कोई तरीका है?Django Haystack - कई फ़ील्ड में गैर अनुक्रमित कई पर खोजें

कुछ की तरह:।।

क्वेरी = SearchQuerySet() मॉडल (Entry.filter (categories__name = 'कुछ'))

बजाय

क्वेरी = SearchQuerySet() मॉडल (एंट्री)

जिस फ़ील्ड को मैं फ़िल्टर करना चाहता हूं वह एक बहुत ही क्षेत्रीय क्षेत्र है और अनुक्रमित नहीं है।

उत्तर

14

खोज सूचकांक किसी भी संबंध को स्टोर नहीं करता है, इसलिए यह 'फ्लैट' है। आप केवल Entry सूचकांक में आपका वर्ग 'आईडी जोड़ सकते हैं (ध्यान दें कि आप इस के लिए एक prepare_ -method का उपयोग करना होगा):

class EntryIndex(indexes.SearchIndex, indexes.Indexable): 
    # your other fields 
    categories = MultiValueField() 

    def prepare_categories(self, obj): 
     return [category.pk for category in obj.categories.all()] 

, जिसे आप की तरह कुछ कर सकते हैं:

category = Category.objects.get(name='something') 
sqs = SearchQuerySet().models(Entry).filter(categories=category.pk) 
संबंधित मुद्दे