Skip to main content
 首页 » 编程设计

python之带有 rest-framework 序列化器的 Django-haystack 给出结果 None

2024年08月26日27webabcd

我正在尝试使用 django-haystack 在我的应用程序中包含一个基于 elasticsearch 的搜索。我正在使用 django-rest-framework 构建 API。以下是我的索引:

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}] 

有人可以告诉我我做错了什么吗?

谢谢。

请您参考如下方法:

我找到了一种更好的序列化数据的方法。我现在正在使用这个:

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) 

现在,我可以在多个模型中进行搜索,而不必担心序列化数据 :)

结果数据是这样的:

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

因此,现在我可以在我的客户端上区分结果。