Web2py产品评论网站。如何显示引用数据库的结果?

时间:2016-04-28 18:33:27

标签: web2py

我正在开发一个产品评论网站。我正在努力展示与该产品相关的所有评论。

我真正想要的是一个WHERE子句,它允许我说出products.id = reviews.prodId ...并显示所有结果,但是从我所看到的是这样做的方法。

进行审核时,会输入产品ID。评论存储在评论数据库中,该数据库对产品数据库有参考价值,但我不确定它是否正确:

db.define_table('reviews',
            Field('id',requires=IS_NOT_EMPTY()), #auto number
            Field('prodId',db.products.id,requires=IS_NOT_EMPTY()), #referenced id
            Field('title',requires=IS_NOT_EMPTY()), # title of the review
            Field('body', 'text',requires=IS_NOT_EMPTY()), # review
            Field('time_stamp','datetime'),  # timestamp w/date
            primarykey=['id'],
            migrate=False)

default.py:

def show():
reviews = db.reviews(request.args(0)) 
products = db.products(request.args(0)) 
return locals()

show.html

{{extend 'layout.html'}}

{{for row in db(db.reviews.prodId == 1).select():}}
<h2>
 {{=reviews.title}} for {{=products.name}}
 </h2>
 <i>Posted on {{=reviews.time_stamp}} by (persons name)</i>
 <p>
 <b>
 {{=reviews.body}}
 </b>
 </p>
 {{pass}}

谢谢,杰里米。

1 个答案:

答案 0 :(得分:0)

使用recursive select,您可以:

def show():
    product = db.products(request.args(0))
    reviews = product.reviews.select()
    return locals()

以上,product.reviews.select()相当于db(db.reviews.prodId == product.id).select()

在视图中,您将拥有:

{{for review in reviews:}}
<h2>{{=review.title}} for {{=product.name}}</h2>
 <i>Posted on {{=review.time_stamp}} by (persons name)</i>
 <p>
 <b>
 {{=review.body}}
 </b>
 </p>
{{pass}}

另一种选择是join

def show():
    rows = db((db.products.id == request.args(0)) &
              (db.reviews.prodId == db.products.id)).select()
    return locals()

然后在视图中:

{{for row in rows:}}
<h2>{{=row.reviews.title}} for {{=row.products.name}}</h2>
 <i>Posted on {{=row.reviews.time_stamp}} by (persons name)</i>
 <p>
 <b>
 {{=row.reviews.body}}
 </b>
 </p>
{{pass}}