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

时间:2016-11-18 00:04:25

标签: django django-queryset django-haystack

为了练习我学到的知识,我开始了一个关于房地产网站的django项目。

下一步是构建搜索页面,用户可以在其中选择multiple filters,例如number of roomsbathsareacity。 ..

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

你有什么建议我?

3 个答案:

答案 0 :(得分:5)

我可以部分理解你的问题。

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

考虑一下,如果您有以下搜索过滤器:

  1. 范围内的房间数(即,min_rooms = 2,max_rooms = 5)
  2. 列表中的浴室数量(即,浴室= [2,3])
  3. 列表中的城市(即,城市= [Chennai,Bangalore,Hyderabad])
  4. 然后,您可以使用单个查询

    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个条件的属性(即,每个Property对象将有2到5个,2个或3个浴室和来自Chennai / Bangalore / Hyderabad市的房间)

答案 1 :(得分:4)

from django.db.models import Q

search_results = Property.objects.filter(Q(room_no=no_of_rooms_val)| Q(bath_room_no=no_of_bath_rooms_val)| Q(area=area_value)| Q(city__exact=city_val))

Detailed explanation of Django Q

答案 2 :(得分:2)

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

我们假设用户正在某个表单页面上为他们的房子选择选项并且您正在通过

获取信息
Y = broadcast(-, X, mean(X,2))

您不需要任何" ifs",而是一个简洁的过滤查询:

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)

您可以在Django QuerySet API Reference

中准备更多相关信息