0

Djangoでディスプレイを作成しようとしています。これは次のようになります。

リンク: http: //i47.tinypic.com/2lk2mw2.png

  1. 毎日の果物の数は動的で、毎日異なります。
  2. コメントフィールドは、管理者が編集できるようにする必要があります。次に、入力を使用してデータベースの行を更新します

問題:これまでのところ、ユーザーがコメント列を編集してデータベースに変更を表示できるようにする方法がわかりません。

****

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

1 に答える 1

2

私に発生する1つの解決策:

HTML の場合:

フォームのメソッドを POST に変更します。

フォームに CSRF トークンを追加します。

ビューで解析するためのノード ID を持つ非表示の入力を追加します。

入力に現在のコメントを事前入力します。

<!-- 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})

これで問題が解決することを願っています。

于 2012-11-16T06:57:36.830 に答える