【发布时间】:2015-10-06 14:21:44
【问题描述】:
我正在使用 Django Rest Framework 构建一个 API,并且我想要一个允许用户通过查询进行搜索的功能。现在,
http://127.0.0.1:8000/api/v1/species/?name=human 产量:
{
count: 3,
next: null,
previous: null,
results: [
{
id: 1,
name: "Humanoid",
characters: [
{
id: 46,
name: "Doctor Princess"
}
]
},
{
id: 3,
name: "Inhuman (overtime)",
characters: [
]
},
{
id: 4,
name: "Human",
characters: [
{
id: 47,
name: "Abraham Lincoln"
}
]
}
]
}
它非常接近我想要的,但并不完全在那里。我希望results 中的第一个对象是id 为4 的对象,因为name 字段与搜索查询最相关(?name=human)。 (我并不真正关心其余部分是如何排序的。)目前它似乎正在通过升序id 对结果进行排序。有谁知道处理这个的好方法?谢谢!
这是我的 api 文件夹的 views.py
class SpeciesFilter(django_filters.FilterSet):
name = django_filters.CharFilter(name="name", lookup_type=("icontains"))
class Meta:
model = Species
fields = ['name']
class SpeciesViewSet(viewsets.ModelViewSet):
queryset = Species.objects.all()
serializer_class = SpeciesSerializer
filter_backends = (filters.DjangoFilterBackend,)
# search_fields = ('name',)
filter_class = SpeciesFilter
【问题讨论】:
标签: python django rest django-rest-framework django-filter