5
tôi có các mô hình sau:Nhận đối tượng chính nước ngoài tại SearchQuerySet quả 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")
....
và các chỉ số sau:
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()
và cho equipmentmodel_text.txt tôi
{{đối tượng .name}} {{object.manufacturer}}
Tuy nhiên, khi bao giờ tôi thực hiện truy vấn này:
results = SearchQuerySet().models(EquipmentModel).filter(name__startswith=request.GET['q'])[:5]
Tôi chỉ nhận được pk của nhà sản xuất. Tôi muốn toàn bộ đối tượng (hoặc ít nhất là tên của nó). Điều đó có thể không?!
Cảm ơn!
rồi nó hoạt động! Bây giờ ... Tôi hơi bối rối như sự khác biệt của các lĩnh vực trong EquipmentModelIndex và những gì trong các thiết bịmodel_text.txt ...? Trong tệp .txt, tôi có nên đặt {{object.manufacturer.name}} hoặc {{object.manufacturer_name}} không? Làm thế nào đến ngay cả khi tôi loại bỏ hoàn thành manufacturer_name từ các chỉ mục và .txt, tôi vẫn có thể truy cập nó từ các đối tượng được trả về từ SearchQuerySet? Cảm ơn! – abisson
Với txt bạn có nghĩa là mẫu được lập chỉ mục? Tất nhiên bạn có thể đặt '{{object.manufacturer.name}}' ở đó khi bạn làm việc với các đối tượng mô hình của Django ở đó ... Bạn vẫn có thể truy cập tên nếu bạn xóa nó khỏi chỉ mục vì nếu bạn truy cập 'result.object' haystack tải dữ liệu bổ sung từ cơ sở dữ liệu ... Để có hiệu suất tốt chỉ làm việc với dữ liệu từ chỉ mục (nhưng sau đó bạn cần phải giữ cho nó tăng tốc!). –
Điều này có thể thú vị đối với bạn: http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#load-all, https://django-haystack.readthedocs.org/en/master/best_practices. html # avoid-hitting-the-database –