从Rows对象Web2py中提取单个记录

时间:2015-05-18 12:37:19

标签: web2py

我有以下数据库表:

db.define_table('game', Field('video', 'upload'),
                Field('pics', 'upload'),
                Field('answer'))

字段pics和字段answers各有6条记录。 video字段只有1条记录。我必须显示pics条记录以及来自answer的6条记录,然后用户必须选择正确的answer记录以匹配显示的pics记录。

Controller

def test():
    rows = db().select(db.game.ALL, limitby=(0, 6), orderby='<random>')
    pic_row = rows[random.randint(0,4)]
    session.pic_id = pic_row.id
    return dict(rows=rows, pic_row=pic_row)

我在View test.html中有此内容:

<h1>{{=pic_row.pics}}</h1>

{{for row in rows:}}
<h4>{{=B(LI(A(row.answer, _href=URL('show_test', args=row.id))))}}</h4>
{{pass}}

每次点击answer后,用户都会被show_test.html发送给show_test.html,用户将再次回到test.html。我希望从pics多次显示新记录(图像)5次,但random将不起作用,因为它可能会重复同一记录多次。如何在每次访问页面时显示来自pics一条记录的6条记录,而不重复任何记录?另一个相关问题是,我希望仅在用户首次访问video时显示test.html

我想学习如何做到这一点,我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

def test():
    if not session.pic_id:
        session.pic_id = []
    rows = db(~db.game.id.belongs(session.pic_id)).select(db.game.ALL, limitby=(0, 6), orderby='<random>')
    pic_row = rows.first()
    session.pic_id.append(pic_row.id)

    if not session.already_visited:
        #Do something to show your video....
        session.already_visited = True     # Change it to true so it doesn't run this piece of code again

    return dict(rows=rows, pic_row=pic_row)

该解决方案可以保存会话中所有以前展出的图片,并且只会随机检索一次图片。我不确定这是不是你真正想做的事情,因为在6张照片之后,没有其他任何东西可以显示给用户。