2014-11-16 2 views
2

elasticsearch 기반 검색을 내 응용 프로그램에 포함 시키려면 django-haystack을 사용하려고합니다. API를 빌드하는 데 django-rest-framework을 사용하고 있습니다. 이것은 내이다Django-haystack with rest-framework serializer 결과 없음

class ArtistIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, model_attr='name') 

    def get_model(self): 
     return Artist 

: 다음 내 인덱스

def search(request): 
    q = request.GET.get('q', '') 
    if q is '': 
     return Response(status=status.HTTP_400_BAD_REQUEST) 
    all_results = SearchQuerySet().models(Artist).filter(content=Clean(q)) 
    serializer = ArtistSerializer(all_results, many=True) 
    print serializer.data 
    return Response(status=status.HTTP_200_OK) 

그리고 내 시리얼이 같은

class ArtistSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Artist 
     fields = (
      'name', 
      'type', 
      'gender', 
      'begin_life', 
      'end_life', 
     ) 

그러나, 나는이 엔드 포인트에 충돌의 print 문 인쇄가 뭔가 :

[{'name': None, 'type': None, 'gender': None, 'begin_life': None, 'end_life': None}, {'name': None, 'type': None, 'gender': None, 'begin_life': None, 'end_life': None}, {'name': None, 'type': None, 'gender': None, 'begin_life': None, 'end_life': None}, {'name': None, 'type': None, 'gender': None, 'begin_life': None, 'end_life': None}, {'name': None, 'type': None, 'gender': None, 'begin_life': None, 'end_life': None}] 

누군가 내가 뭘 잘못하고 있는지 말해 줄래?

감사합니다.

답변

3

데이터를 직렬화하는 더 좋은 방법을 찾았습니다.

{ 
    "fields": { 
     "name": "Megadeth", 
     "end_life": "", 
     "gid": "a9044915-8be3-4c7e-b11f-9e2d2ea0a91e", 
     "gender": "", 
     "type": "2", 
     "begin_life": "1983-6-" 
    }, 
    "model": "InQusic.artist", 
    "pk": 975773 
} 

너무 : 데이터 :

결과 데이터는 다음과 같이이다 직렬화에 대한 걱정없이 내가 여러 모델에서 검색 할 수 있어요, 이제

from django.core import serializers 

-- snippet -- 

def search(request): 
    q = request.GET.get('q', '') 
    if q is '': 
     return Response(status=status.HTTP_400_BAD_REQUEST) 
    all_results = SearchQuerySet().filter(content=Clean(q)) 
    serializer = serializers.serialize("json", [q.object for q in all_results]) 
    print serializer 
    return Response(status=status.HTTP_200_OK) 

: 지금이 사용하고 이제는 내 고객에게 결과를 차별화 할 수 있습니다.