0
複数のフォームを含むページを作成しようとしていて、ページのいくつかの投稿を「好き」できるように「好きなボタン」のようなものを作りたい。私はまた、すべての投稿が好きなのでいくつかの制限を入れたいと思っていますが、各投稿が一度しか好きではありません。複数のフォームを投稿するときのDjangoのcsrfトークン
今私は投稿を「好き」できるという問題に遭遇します。別の投稿に「好き」をクリックすると、csrfエラーが発生します(CSRFの確認に失敗しました。リクエストが中止されました)。私は同じ時間に複数の投稿を好きにする方法を知りたい。
{%csrf_token%}の配置方法と場所は何ですか?この記事(How Will the Inclusion of Two Forms Affect my CSRF Token Use?)は、すべてのフォームに{%csrf_token%}を入れるべきだと言いますが、うまくいかないようです。ここで
は私のコードです:
models.py
class Restaurant(models.Model):
name = models.CharField(max_length=20)
phone_number = models.CharField(max_length=15)
address = models.CharField(max_length=50, blank=True)
likes = models.DecimalField(max_digits=2,decimal_places=0, default=0)
views.py
<!doctype html>
<html>
<head>
<title> Menu </title>
<meta charset='utf-8'>
</head>
<body>
<h2>餐廳列表</h2>
<table>
<tr>
<th>ID</th>
<th>NAME</th>
<th>PHONE</th>
<th>ADDRESS</th>
<th>LIKES</th>
<th>LIKE IT!</th>
</tr>
{% for r in restaurants %}
<tr>
<td> {{ r.id }} </td>
<td> {{ r.name }} </td>
<td> {{ r.phone_number }} </td>
<td> {{ r.address }} </td>
<td> {{ r.likes }} </td>
<td>
<form id={{ r.id }} action="" method="post">
{% csrf_token %}
<input type="hidden" name="ok" value="yes">
<input class="submit" type="submit" value="Upvote">
</form>
</td>
</tr>
{% endfor %}
</table>
</form>
</body>
</html>
views.py
def list_restaurants(request):
restaurants = Restaurant.objects.all()
if request.method == "POST":
post = Restaurant.objects.get(id=request.POST['id'])
post.likes += 1
post.save()
return render_to_response('restaurants_list.html',locals())
else:
return render(request, 'restaurants_list.html',locals())
おかげで、しかし、私は私がすべてのポストを好むことができるように、いくつかの制限を配置したい場合は、ことができますが、一度だけ、各ポストのような? – CYH16
その別のロジック。どのユーザーをどのポストのように保存する必要があります。あなたはそれを構築する必要があります – itzMEonTV
ありがとう。私はそれに取り組んでいる/ – CYH16