2016-03-21 16 views
0

Web2py'deki görünümünden veritabanı tablosunu sorgulamaya çalışıyorum çünkü mevcut tablodaki her satır için başka bir tablodan alan almam gerekiyor, bu yüzden şu şekilde bir kod yazdım:Veritabanından sorgulama web2py

{{for recipe in rows:}} 

<div class="well"> 
    <table> 
     <tr> 
      <td> 
      <div style="text-align:center"> 
<img width="200px" 
    src="{{=URL('download', args=db(db.uploads.recipe_id==recipe.id).select().first().up_file)}}" /> 
</div> 

      </td> 
      <td><button> 
      - 
      </button></td><td><span class='votes'>{{=recipe.votes}}</span></td><td><button> 
      + 
      </button><td><strong>{{=A("comments",_href=URL('view_posts',args=recipe.id))}},{{=recipe.name}}</strong></td></td></tr> 
    </table> 

</div> 
{{pass}} 

Ancak bir veritabanını bir görünümden sorgulayıp sorgulayamayacağımızdan şüphem var mı? Değilse, aynı şeyi denetleyiciden nasıl sorgulayabilir ve görünüme geri döndürebilirim? Bu saçma bir şüphe olabilir, ama üzgünüm ben

cevap

1

Sen can bunu web2py için yeni, ancak tablodaki her satır için ayrı bir sorgu olacak gibi, çok verimli değildir. Bunun yerine, denetleyici içinde rows nesne oluşturmak için sorgu db.uploads tabloyla katılmak bir içermelidir:

rows = db((your_current_query) & (db.uploads.recipe == db.recipe.id)).select() 

Sonra görünümünde:

{{for row in rows:}} 

<div class="well"> 
    <table> 
     <tr> 
      <td> 
      <div style="text-align:center"> 
<img width="200px" 
    src="{{=URL('download', args=row.uploads.up_file)}}" /> 
</div> 

      </td> 
      <td><button> 
      - 
      </button></td><td><span class='votes'>{{=row.recipe.votes}}</span></td><td><button> 
      + 
      </button><td><strong>{{=A("comments",_href=URL('view_posts',args=row.recipe.id))}},{{=row.recipe.name}}</strong></td></td></tr> 
    </table> 

</div> 
{{pass}} 

Not, rows nesne artık katılmak temsil ettiği için İki tablo arasında, verilen bir değere erişmek için hem tablo adını hem de alan adını kullanmanız gerekir (ör. yerine row.name). Bunu netleştirmek için for döngüsünde recipe değerini row olarak değiştirdim.