0

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

链接:http: //i47.tinypic.com/2lk2mw2.png

  1. 每天的水果数量是动态的并且每天都不同。
  2. 评论字段可由管理员编辑。然后输入将用于更新数据库中的行

问题:到目前为止,我不确定如何允许用户编辑评论列并显示数据库中的更改

**

  • 水果.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 %}
4

1 回答 1

2

我想到的一种解决方案:

在 HTML 中:

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

将 CSRF Token 添加到表单中。

添加带有 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 Token 和 Node 模型的导入装饰器

使用 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})

希望这能回答你的问题。

于 2012-11-16T06:57:36.830 回答