2016-11-18 2 views
0

私が学んだことを実践するために、私は不動産のウェブサイトについてのジャンゴプロジェクトを始めました。私は、検索エンジンを使用し、私が読んだ本でdjango - 不動産プロジェクトのフィルターを作る

次のステップは、exempleため、ユーザーはmultiple filtersを選択することができます検索ページを構築することですnumber of roomsbathsareacity ...

(SORLとdjango haystack)ので、私はそれを使用してDB上のユーザ条件をフィルタリングする必要があるのだろうか、あるいは多くの場合はifsのdjandoクエリのみを使用して簡単に保つべきかどうか疑問に思っています。

私に何をお勧めしますか?

答えて

2

あなたが尋ねていることは少し不明ですが、一般的にDjangoのフィルタは非常に強力であるため、これを使用することをお勧めします。

のは、ユーザーが何らかの形でページに自分の家のためのオプションを選択して、あなたはあなたが任意の「IFS」を必要としないでしょう

number_of_rooms = request.GET.get('number_of_rooms', 0) 
area = request.GET.get('area', 0) 

との情報を得ているとしましょう、しかしむしろ1簡潔なフィルタクエリ:

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 QuerySet API Reference

2
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

+0

なぜこれを行うべきかOPが理解できるように少しお教えください。 – Surt

+0

@Surt Basicフィルタは、&演算子の組み合わせに基づいてクエリーセットを返します。 Qオブジェクトは、&と|を使用して結合に基づいてクエリーセットを返すことができます。演算子。 –

+0

@IbrahimKあなたの答えに 'Q'オブジェクトに関する説明を追加してください。 OPがあなたの答えを理解するのに役立ちます。特定の時点で特定のリンクが変更されると、他の人を助けることはありません。 – arulmr

3

あなたの質問は部分的に理解できました。

私の個人的な経験から、私はDjangoフィルタの使用をお勧めします。次の検索フィルタを使用している場合

は、考えてみましょう:リストで風呂の

  1. 範囲内の部屋の数(すなわち、min_rooms = 2、max_rooms = 5)
  2. 数(すなわち、風呂。 = [2、3]リストで)
  3. 都市(すなわち、都市= [チェンナイ、バンガロール、ハイデラバード])

その後、あなたは

012として単一のクエリを使用することができます

上記のクエリは3つの条件がすべて満たされたプロパティを返します。プロパティオブジェクトには、チェンナイ/バンガロール/ハイデラバード市の2〜5,2,3の浴室&の部屋があります。

関連する問題