2013-10-08 3 views
2

Я пытаюсь проиндексировать мои модели, у которых есть отношения один-много (внешний ключ). И я не мог справиться, как объявить search_indexes.py для того, кто знает, что делать для этого:Django Foreign Key indexing in Solr Haystack

models.py:

class CarModel(models.Model): 
    manufacturer = models.ForeignKey(Manufacturer) 

class Manufacturer(models.Model): 
    name = models.CharField(max_length=200) 

search_indexes.py:

class ManufacturerIndex(indexes.SearchIndex, indexes.Indexable): 
    carmodel = MultiValueField(indexed=True, stored=True, faceted=True) 

    def prepare_carmodel(self, obj): 
     return ???????????????????  

    def get_model(self): 
     return Manufacturer 

ответ

2

You имеют экземпляр Manufacturer, поэтому вам нужно отменить отношение ForeignKey для создания списка pks (в данном случае) для сохранения в MultiValueField

def prepare_carmodel(self, obj): 
    return [int(cm.pk) for cm in obj.carmodel_set.all()] 
+0

Я пробовал это, похоже, что он терпит неудачу с неизвестным полем 'carmodel' – Mutant

+0

Вам не должно быть недостатка 'carmodel = MultiValueField (indexed = True, stored = True, faceted = True)' ... Вам нужно и объявление поля AND метод 'prepare_'. –