Django Restframework-SearchFilter的多个模型



使用带有Restframework的Django 3.2。我正在尝试搜索过滤器,并创建一个带有restframework的API,该API将输出搜索到的术语及其整个对象。

我和官方医生在这方面取得了一些成功。但从那以后,我只能在一个单一的模型中搜索,而不能在全球范围内搜索。

有没有关于如何将多个模型一起使用的现有文档、博客?或者任何工作实例。

正如@Prince建议的那样,为了博客,我试着关注。

views.py

class GlobalSearchList(generics.ListAPIView):
serializer_class = GlobalSearchSerializer
def get_queryset(self):
query = self.request.query_params.get('query', None)
users = MasterUser.objects.filter(Q(firstname__icontains=query) | Q(lastname__icontains=query) | Q(email__icontains=query) | Q(category__icontains=query))
webinar = MasterWebinar.objects.filter(Q(host__icontains=query) | Q(title__icontains=query))
resource = MasterResource.objects.filter(Q(route_name__icontains=query))
section = ResourceSection.objects.filter(Q(resource_name__icontains=query))
item = SectionItem.objects.filter(Q(item_title__icontains=query))
all_results = list(chain(users,webinar, resource,section,item)) 
return all_results

serializers.py

class GlobalSearchSerializer(serializers.ModelSerializer):

class Meta:
model = MasterUser
fields = "__all__"
def to_native(self, obj):
if isinstance(obj, MasterIndividualMembers): 
serializer = MasterIndividualMembersSerializer(obj)
elif isinstance(obj, MasterUser):
serializer = MasterUserSerializer(obj)
elif isinstance(obj, MasterWebinar):
serializer = MasterWebinarSerializer(obj)
elif isinstance(obj, MasterResource):
serializer = MasterResourceSerializer(obj)
elif isinstance(obj, ResourceSection):
serializer = ResourceSectionSerializer(obj)
elif isinstance(obj, SectionItem):
serializer = SectionItemSerializer(obj)
else:
raise Exception("Not found in any instance!")
return serializer.data

这里我停留在meta类,因为它只接受一个模型。

试着遵循本教程,它可能会帮助你。。。

https://yeti.co/blog/global-search-in-django-rest-framework/

最新更新