从数据库中删除列表项

时间:2011-11-19 23:47:28

标签: web2py

这可能是一个简单的问题,我有一个表单,您在评论中将其重定向到提交时的另一个页面,并在列表中显示所有注释。我想知道如何为每个列表项添加一个擦除按钮以删除该特定注释。

提前谢谢你,

db.define_table('discussion',
                Field('comment', 'text'))

def comment():
    form = SQLFORM(db.discussion, _class='test1')
    if form.process().accepted:
        redirect(URL('comment_results'))
    return dict(form=form)  

def comment_results():
    items = db(db.discussion.id==db.discussion.id).select()
    ???? erase = db(db.discussion.id==).delete() ????
    ### trying to create an erase button to delete the currently displayed comment ###
    return dict(items=items, erase=erase)

view:
<html>
    <head>
        <link rel="stylesheet" href="{{=URL('static','css/test.css')}}">
    </head>
        <body>
            {{for item in items:}}
            <li>{{=item.id}} Comment = {{=item.comment}}<button id="{{=erase}}">erase</button></li> 
            {{pass}}
        </body>
</html>

*回答* 视图:

<html>
    <head>
        <link rel="stylesheet" href="{{=URL('static','css/test.css')}}">
    </head>
        <body>
            {{for item in items:}}
            {{=item.comment}}<a href="{{=URL('delete', args=item.id)}}">  Delete</a>
            {{pass}}
        </body>
</html>

*我刚刚将args传递给控制器​​中的delete方法 控制器:

def delete():
    query = db(db.discussion.id==request.args(0)).select().first()  ## grabbing comment to be deleted from comment_results
    remove = db(db.discussion.id==query).delete()
    if remove:
        redirect(URL('comment_results'))
    return dict(remove=remove)

2 个答案:

答案 0 :(得分:1)

如果你看这里http://web2py.com/book/default/chapter/07#SQLFORM-and-insert/update/delete

他们提到了一个名为apptable的可删除字段,可能是它。

也许试试:

    form = SQLFORM(db.discussion, _class='test1', deletable=True)

查看该行是否有效。

编辑:对不起,错误的字段。你必须创建一个表单。

我认为就是这样,因为它在我链接的页面上说:

  

更新表单与创建表单非常相似,除非它是   预先填充当前记录并预览图像。通过   default deletable = True表示更新表单将显示   “删除记录”选项。

答案 1 :(得分:0)

如果你使用的是Django,你必须通过我想象的模板代码为每个评论框生成一个视图控制器。我不知道你的数据库是如何构建的,但是每条评论可能都有一个原始文章的链接ID,以及你将存储评论的表中的唯一ID。使用MVC你会生成那些注释框并在保留唯一注释ID和注释控制器需要具有的子程序操作的同时渲染它们;然后当你点击删除时,包含评论的唯一ID的控制器将通过你的MVC评论模板查询数据库和voiala ... 至少那就是我在使用MVC范式编码时如何处理这样的评论系统

我希望你能有一些检查来防止数据库注入攻击和用户权限......