Django:通过表格单元更新数据库行

时间:2012-11-16 05:47:08

标签: django

尝试在Django中创建一个Display,看起来像这样。

link:http://i47.tinypic.com/2lk2mw2.png

  1. 每天的水果数量是动态的,每天都不同。
  2. 评论字段可由管理员编辑。输入会 然后用于更新数据库中的行
  3. 问题:到目前为止,我不确定如何允许用户编辑评论栏并在数据库中显示更改

    **

    • fruits.html

    **

    {% for item in nodes %}
    <tr>
        <td class = "tablebord"><a href ="/nodes/node/{{ item.nodeid }}/">{{ 
         item.nodeid }}</a></td>
        <td class = "tablebord">{{ item.lastseen }} </td>
        <td class = "tablebord"><div contenteditable>{{ item.comment }}    <p>
                <form action="" method="get">
                  <input type="text" name="q">
                  <input type="submit" value="test">
                </form>
         </p> </div> </td>
        <td class = "tablebord">{{ item.lastipaddr }} </td>
    </tr>
    {% endfor %}
    

1 个答案:

答案 0 :(得分:2)

我遇到的一个解决方案:

在HTML中:

将表格中的方法更改为POST。

将CSRF令牌添加到表单。

使用nodeid添加隐藏输入以便在视图中进行解析。

使用当前评论预填充输入。

<!-- Comment Cell -->
<td class = "tablebord">
  <div contenteditable>
    <form action="" method="post"> {% csrf_token %}
      <input type="text" name="comment" value={{ item.comment }} />
      <input type="hidden" value={{ item.nodeid }} name="nodeid" />
      <input type="submit" value="edit" />
    </form>
  </div>
</td>

在views.py中:

导入CSRF令牌和节点模型的装饰器

使用CSRF Protect装饰视图。

检查表单是否已提交。

如果是,请获取节点并更改评论。

渲染模板。

# decorator
from django.views.decorators.csrf import csrf_protect

from app.Node.models import Node

# view to handle table
@csrf_protect
def fruits(request):
  nodes = Nodes.objects.all()
  # user is posting: get edited node, change comment, and save
  if request.POST:
    nodeid = request.POST.get('nodeid')
    edited_node = nodes.get(nodeid=nodeid)
    edited_node.comment = request.POST.get('comment')
    edited_node.save()

  # render template with nodes
  return render(request, 'fruits.html', {'nodes':nodes})

希望这能解决您的问题。