2016-08-15 11 views
0

私は2つのモデルを持っています。Djangoフィルタオブジェクトと最初に対応する値を取得

class House(models.Model): 
    name= models.Charfield(max_length=100) 
    city= models.Charfield(max_length=100) 
    area= models.CharField(max_length=200) 
    country=models.CharField(max_length=30) 

class HouseRooms(models.Model): 
    room_name=models.Charfield(max_length=200) 
    house= models.ForeignKey(House, related_name='house_hr') 
    room_price=models.PositiveIntegerField() 

ユーザーがキーワード検索を実行して、私はそれぞれの「家」の名前とそれに対応する「HouseRooms」の最初のroom_priceを返すようにしたいです。下の私の意見を参照してください。

def my_house_search(request): 
    query_string= '' 
    rms= None 
    sms=None 
    if ('q' in request.GET) and request.GET['q'].strip(): 
     query_string = request.GET['q'] 

     entry_query= get_query(query_string, ['city','country',]) 

     rms= House.objects.filter(entry_query).order_by('-pub_date') 
     sms= HouseRooms.objects.filter(house_id__in=rms) 


     return render(request, 'search/my_house_search.html',{'rms':rms, 'sms':sms, 'query_string':query_string}) 

テンプレート:私が書いたコードで

{% if query_string %} 
    <p> Results </p> 


    {% if rms %} 
     {% for m in rms %} 
     <p> Name: {{ m.name }} </p> 
     {% empty %} 
      <p> No house found </p> 
     {% endfor %} 

     {% for sd in sms %} 
     <p> price: {{ sd.room_price }} for {{sd.room_name}}</p> 
     {% empty %} 
     <p> no price found </p> 
     {% endfor %} 

    {% endif %} 

    {% endif %} 

、それは各家の名前を返すと、このようなすべての家に、すべての価格が表示されます:

Coker House 

Klopp House 

$50/day for small room 
$100/day for medium room 
$200/day for big room 

$200/day for quack room 
$400/day for master room 
$500/day for big room 

私はちょうどしたいですこのような結果を返します。

Coker House 
$50/day for small room 

Klopp House 
$200/day for quack room 

何が欠けていますか?これについてどうすればいいですか?

答えて

2

ビュー内でHouseRoomsを明示的に照会しないでください。その代わりに、リバース・リレーションシップ・アクセサをテンプレート自体の反復内で使用することができます。

{% for m in rms %} 
    <p> Name: {{ m.name }} </p> 
    {% with m.house_hr.first as sd %} 
    {% if sd %} 
     <p> price: {{ sd.room_price }} for {{sd.room_name}}</p> 
    {% else %} 
     <p> no price found </p> 
    {% endif %} 
    {% endwith %} 
{% empty %} 
    <p> No house found </p> 
{% endfor %} 
+0

あなたはダニエルをロックします。今働いている。ありがとう。 – YoYo

関連する問題