【问题标题】:Multiple field text search in DjangoDjango中的多字段文本搜索
【发布时间】:2021-04-03 15:45:22
【问题描述】:

我有一个应用程序“api”,其中有一个文件夹“models”。在那个文件夹中,我有几个“.py”文件,例如“client.py”、“治疗师.py”、“user.py”等。在“治疗师.py”中,我有几个类,但我只需要一个类“治疗师档案”。在那个类中有几个字段,但我只需要 "name", "surname", "skills", "city" 进行搜索。 所以目的是通过写一个句子来搜索。示例(用户可以在搜索栏中写的内容):

“Tommy davidson Listening london”(必须不区分大小写)。

单词将用空格分隔。如果我们错过任何字段,它也必须工作:

“汤米听伦敦”(我们没有写姓氏)

还有:

“伦敦听汤米”(我们可以改变单词的位置

并且不一定字段数据仅包含 1 个单词。它可以更多。例如:“技能”:“仔细聆听”或“城市”:“洛杉矶”

这里是模型/治疗师.py 中的 TherapistProfile 类:

class TherapistProfile(NonAdminProfile):
  user = models.OneToOneField(Therapist, on_delete=models.CASCADE, related_name='therapist_profile')
  skills = models.ManyToManyField(TherapistSkill, blank=True)
  city = models.ManyToManyField(TherapistCity, blank=True)
  ...

PS “name”和“surname”字段在 Therapist 类中(继承自 user.py)。在 TherapistProfile 中,该字段被写为“用户”。

我有点知道逻辑:我需要将句子按空格分成单词并在每个对象的每个字段中搜索每个单词(如果您有更好的解决方法,请告诉我),但我没有知道如何编写代码以及在哪里编写代码(我的意思是在views/treatment.py、models/treatment.py(如果需要的话)、TherapistProfile 或TherapistManager 中写什么)。是的,我也没有 view.py 文件,我有“views”文件夹和“.py”文件(其中一个是“治疗师.py”。序列化程序也会发生同样的事情)。我需要一个新的序列化程序来进行搜索吗?

【问题讨论】:

    标签: python django search django-rest-framework


    【解决方案1】:

    答案是:

    import from rest_framework import filters
    ...
    ...
    class TherapistProfileListAPIView(generics.ListAPIView):
        permission_classes = [IsAuthenticated]
        search_fields = ['user__last_name', 'user__first_name', 'skills__title', 'city']
        filter_backends = (filters.SearchFilter,)
        queryset = TherapistProfile.objects.all()
        serializer_class = TherapistProfileSerializer 
    
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多