2015-12-16 26 views
13

Django'yu 1,7'den 1,9'a güncelledikten sonra, Haystack ve Solr tabanlı arama motoru çalışmayı durdurdu. Bu bana seni mi:Haystack “Model SearchResult için bulunamadı” diyor

./manage.py shell 
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> from haystack.query import SearchQuerySet 
>>> sqs = SearchQuerySet().all() 
>>>sqs[0].pk 
u'1' 
>>> sqs[0].text 
u'\u06a9\u0627\u0645\u0631\u0627\u0646 \u0647\u0645\u062a\u200c\u067e\u0648\u0631 \u0648 \u0641\u0631\u0647\u0627\u062f \u0628\u0627\u062f\u067e\u0627\nKamran Hematpour & Farhad Badpa' 
>>> sqs[0].model_name 
u'artist' 
>>> sqs[0].id 
u'mediainfo.artist.1' 
>>> sqs[0].object 
Model could not be found for SearchResult '<SearchResult: mediainfo.artist (pk=u'1')>'. 

benim veritabanı empy değil söylemek zorunda ve benim yapılandırma aşağıdaki gibidir:

HAYSTACK_CONNECTIONS ={ 
    'default': { 
     'ENGINE': 'haystack.backends.solr_backend.SolrEngine', 
     'URL': 'http://ahangsolr:8983/solr', 
    }, 
} 

Ve bu benim search_indexes.py geçerli:

import datetime 
from haystack import indexes 
from mediainfo.models import Album 
from mediainfo.models import Artist 
from mediainfo.models import PlayList 
from mediainfo.models import Track 
from mediainfo.models import Lyric 

class AlbumIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    artist = indexes.CharField(model_attr='artist', indexed=True) 
    publish_date = indexes.DateTimeField(model_attr='publish_date') 

    def get_model(self): 
     return Album 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.filter(publish_date__lte=datetime.datetime.now()) 


class ArtistIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    def get_model(self): 
     return Artist 


class PlaylistIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    def get_model(self): 
     return PlayList 


class TrackIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    def get_model(self): 
     return Track 


class LyricIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    def get_model(self): 
     return Lyric 
+0

Hangi Haystack sürümünü kullanıyorsunuz? –

+0

@ThomasOrozco haystack 2.4.1 –

cevap

6

Bu sorunu, 2.4.1 sürümüne eksik bir işlem ekleyerek giderebildim. Bu sabit bu sorun böylece bu belirli taahhüt kadar

pip install git+ssh://[email protected]/django-haystack/[email protected] 

yüklemek için yapabileceğiniz https://github.com/django-haystack/django-haystack/commit/f1ed18313777005dd77ed724ecbfb27c0b03cad8

oldu işlemek.

+0

Cevabım bu yanıt oldu @elchudi Teşekkürler ama buna bazı değişiklikler ekledim: pip install git + https: //[email protected]/django-haystack/[email protected] usta gerçekten gerçekten işe yaramadı –

+1

Eğer golden_boy615 hoş geldiniz, master her zaman değişecek beri pip @master takip olmaz ve django-haystack yeni bir sürümü kadar sadece bildiğiniz belirli bir işlem izlemek için daha iyidir Eserleri – elchudi

1

O modelinizi bulabileceğinizden emin olmak için uygulama kaydını kontrol etmeye başlamak iyi olur (sadece emin olmak için).

from django.apps import apps as django_apps 
model = django_apps.get_model('mediainfo.artist') 
model.app_label, model.model_name 
assert model._meta.app_label == 'mediainfo' 
assert model._meta.model_name == 'artist' 

Sonra dönen ne haystack kontrol ederim.

from haystack.utils.app_loading import haystack_get_model 
haystack_model = haystack_get_model('mediainfo', 'artist') 
haystack_model == model 

aynı şeyi dönmezse (haystack_model = model!); o zaman daha fazla kazmanız gerekecek. Bununla birlikte, yükleme ve bakma modelleri, django 1.7.0 ve 1.8.0 (kullanım dışı) ve django.db.models.loading.get_model arasında değiştirildi 1.8.2'de kaldırıldı. hakkında Ayrıntıları.

Bu nedenle, django 1.9.0 ile çalışmak için django-haystack için this commit; Yani django-haystack>=2.4.0.

+1

benim haystack sürümüm 2.4.1 ve django_apps.get_model ('mediainfo.artist') Hata yok ile döner: . Bu sorunu çözmek için daha fazla bilgi sağlayabileceğim başka bir şey var mı? –

+0

haystack_model == model, True değerini döndürür ancak modelin app_label ve model_name özniteliğini kullanırken burada bir hata var: AttributeError: type object 'Artist' özniteliği 'model_name' ve AttributeError: type object 'Sanatçı' 'app_label' özniteliği yok! !! Bu sorunla da ilgilenen –

+1

- bir düzeltme yaptınız mı? benim için haystack_model == model ve bu sorun devam ediyor –