django-为房地产项目构建过滤器

django-为房地产项目构建过滤器,django,django-queryset,django-haystack,Django,Django Queryset,Django Haystack,为了实践我学到的东西,我开始了一个关于房地产网站的django项目 下一步是构建搜索页面,用户可以在其中选择多个过滤器,例如,房间数,浴室,区域,城市 在我读的书中,我使用了一个搜索引擎(Sorl with django haystack),所以我想知道是应该使用它来过滤数据库上的用户条件,还是应该只使用带有许多ifs的djando查询来保持简单 你有什么建议吗?有点不清楚你在问什么,但总的来说,我建议使用Django的过滤器,因为它非常强大 假设用户在某个表单页面上为他们的房子选择选项,您可以

为了实践我学到的东西,我开始了一个关于房地产网站的django项目

下一步是构建搜索页面,用户可以在其中选择多个过滤器,例如,
房间数
浴室
区域
城市

在我读的书中,我使用了一个搜索引擎(Sorl with django haystack),所以我想知道是应该使用它来过滤数据库上的用户条件,还是应该只使用带有许多
ifs
的djando查询来保持简单


你有什么建议吗?

有点不清楚你在问什么,但总的来说,我建议使用Django的过滤器,因为它非常强大

假设用户在某个表单页面上为他们的房子选择选项,您可以通过

number_of_rooms = request.GET.get('number_of_rooms', 0)
area = request.GET.get('area', 0)
您不需要任何“如果”,而是需要一个简洁的过滤器查询:

matching_house = Houses.objects.filter(number_of_rooms__gte=number_of_rooms, area__gte=area)
这将返回所有房屋,其中至少有用户想要的房间数量,至少有用户想要的面积

您还可以允许用户输入房间数和面积的范围:

min_number_of_rooms = request.GET.get('min_number_of_rooms', 0)
max_number_of_rooms = request.GET.get('max_number_of_rooms', 0)
min_area = request.GET.get('min_area', 0)
max_area = request.GET.get('max_area', 0)
然后只需相应地扩展过滤条件:

matching_house = Houses.objects.filter(number_of_rooms__gte=min_number_of_rooms, number_of_rooms__lte=max_number_of_rooms, area__gte=min_area, area__lte=max_area)
等等

你可以在网站上准备更多关于它的信息


我能部分理解你的问题

根据我的个人经验,我建议使用Django过滤器

如果您有以下搜索筛选器,请考虑:

  • 范围内的房间数(即,最小房间数=2,最大房间数=5)
  • 列表中的浴室数量(即浴室=[2,3])
  • 列表中的城市(即城市=[钦奈、班加罗尔、海得拉巴])
  • 然后,您可以使用单个查询作为

    search_results = Property.objects.filter(no_of_rooms__gte=min_rooms, no_of_rooms__lte=max_rooms, no_of_bath_rooms__in=baths, city__in=cities)
    

    上面的查询返回满足所有3个条件的属性(即,每个属性对象将有2到5间房间,2个或3个浴室&来自钦奈/班加罗尔/海得拉巴市)

    请详细说明一下,以便OP能够理解为什么要这样做。@Surt Basic filter将根据和运算符的组合返回查询集。Q对象可以使用&和|运算符根据组合返回查询集。@IbrahimK在答案中添加关于
    Q
    对象的解释。这将有助于OP理解您的答案。如果给定的链接在某个时间点发生变化,它将不会帮助其他人。
    search_results = Property.objects.filter(no_of_rooms__gte=min_rooms, no_of_rooms__lte=max_rooms, no_of_bath_rooms__in=baths, city__in=cities)