Удалить элемент списка из базы данных - PullRequest
1 голос
/ 20 ноября 2011

Это, вероятно, простой вопрос, у меня есть форма, которую вы помещаете в комментарий, который перенаправляет на другую страницу после отправки и отображает все комментарии в списке.Мне интересно, как я могу добавить кнопку стирания для каждого элемента списка, чтобы удалить этот конкретный комментарий.

Заранее спасибо,

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>

* Я только что передал аргументыметод удаления в контроллере * Контроллер:

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 ]

1 голос
/ 20 ноября 2011

если вы посмотрите здесь http://web2py.com/book/default/chapter/07#SQLFORM-and-insert/update/delete

В них упоминается поле с именем deleteable для appadmin, которое может быть им.

Может быть, попробовать:

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

для этой строки, чтобы увидеть, работает ли она.

edit: извините, неверное поле. Вам нужно будет создать форму.

Я думаю, что это так, потому что на странице, на которую я ссылаюсь, написано:

Форма обновления очень похожа на форму создания, за исключением того, что она предварительно заполняется текущей записью, и она просматривает изображения. От по умолчанию deletetable = True, что означает, что форма обновления будет отображать опция "удалить запись".

0 голосов
/ 20 ноября 2011

если вы используете Django, вы должны сгенерировать, используя код шаблона, который я себе представляю, контроллер представления для каждого поля комментария. Я не знаю, как у вас структурирована база данных, но каждый комментарий может иметь идентификатор ссылки на оригинальную статью и собственный уникальный идентификатор в таблице, в которой вы будете хранить комментарии. использование MVC сгенерирует эти поля комментариев и отобразит их, сохранив уникальный идентификатор комментария и операции подпрограммы, которые должен иметь контроллер комментариев; затем, когда вы нажмете «Удалить», контроллер, содержащий уникальный идентификатор комментария, запросит базу данных и войла через ваш шаблон комментария MVC ... по крайней мере, так я бы подошел к такой системе комментариев при использовании кодирования парадигмы MVC

Я надеюсь, что у вас будет какая-то проверка для предотвращения атак на базы данных и пользовательских привилегий ...

...