2013-05-31 7 views
5

मैं निम्नलिखित मॉडल:SearchQuerySet में विदेशी कुंजी वस्तु परिणाम Haystack

class EquipmentModel(models.Model): 
    name = models.CharField(max_length=64, blank=False) 
    description = models.CharField(max_length=64, blank=True) 
    manufacturer = models.ForeignKey(Manufacturer, related_name="manufacturer") 
    .... 

और निम्नलिखित अनुक्रमित:

class EquipmentModelIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name = indexes.CharField(model_attr="name") 
    manufacturer = indexes.CharField() 

    def get_model(self): 
     return EquipmentModel 

    def index_queryset(self, using=None): 
     return self.get_model().objects.all() 

और है कि मेरे equipmentmodel_text.txt

{{वस्तु के लिए .name}} {{object.manufacturer}}

हालांकि, जब कभी भी मैं यह प्रश्न करता हूं:

results = SearchQuerySet().models(EquipmentModel).filter(name__startswith=request.GET['q'])[:5] 

मुझे केवल निर्माता का पीके मिलता है। मैं पूरी वस्तु चाहता हूं (या कम से कम इसका नाम)। क्या यह संभव है?!

धन्यवाद!

उत्तर

7

प्राप्त करने के लिए है कि आप पहले से ही add the manufacturer's name सूचकांक करने के लिए जब का अनुक्रमण चाहिए:

class EquipmentModelIndex(indexes.SearchIndex, indexes.Indexable): 
    # your other fields 
    manufacturer_name = indexes.CharField() 

    def index_queryset(self, using=None): 
     # using select_related here should avoid an extra query for getting 
     # the manufacturer when indexing 
     return self.get_model().objects.all().select_related('manufacturer') 

    def prepare_manufacturer_name(self, obj): 
     return obj.manufacturer.name 
+0

ठीक है यह काम करता है! अब ... मैं थोड़ा उलझन में हूं कि उपकरणमोडेल इंडेक्स में फ़ील्ड का अंतर क्या है और उपकरण model_text.txt में ...? .txt में, क्या मुझे {{object.manufacturer.name}} या {{object.manufacturer_name}} रखना चाहिए? अगर मैं इंडेक्स और .txt से पूर्ण निर्माता_नाम हटा देता हूं, तो भी मैं SearchQuerySet से लौटाई गई वस्तुओं से इसे एक्सेस कर सकता हूं? धन्यवाद! – abisson

+1

txt के साथ आप अनुक्रमित टेम्पलेट का मतलब है? बेशक आप वहां {{{object.manufacturer.name}} डाल सकते हैं क्योंकि आप Django के मॉडल ऑब्जेक्ट्स के साथ काम करते हैं ... यदि आप इसे इंडेक्स से हटाते हैं तो भी आप नाम तक पहुंच सकते हैं क्योंकि यदि आप 'result.object' तक पहुंचते हैं हैस्टैक डेटाबेस से डेटा को अतिरिक्त रूप से लोड करता है ... अच्छे प्रदर्शन के लिए केवल इंडेक्स से डेटा के साथ काम करते हैं (लेकिन फिर आपको इसे अपरिवर्तित रखने की आवश्यकता है!)। –

+0

यह आपके लिए दिलचस्प हो सकता है: http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#load-all, https://django-haystack.readthedocs.org/en/master/best_practices। एचटीएमएल # से बचने-डेटाबेस-डेटाबेस –

संबंधित मुद्दे