Djandoでいいね機能を実装しました。主な実装箇所は以下の通りです。
いいねをするとメッセージにより、いいねをしました。いいねを取り消しました。との表示をさせる事には成功したのですが、テンプレート側の表示、「いいねをする」を「いいねをした」に変えたいのですが、あるユーザーがいいねしたかどうかを判別する方法が分かりません。
view側の「is_like」を渡す方法も探したのですが、結局は分かりませんでした。
どなたかアドバイスお願いします。
model.py
python
1class Post(models.Model): 2 user = models.ForeignKey(User, on_delete=models.PROTECT, related_name='voice_user') 3 text = models.TextField(blank=False) 4 date_created = models.DateTimeField(auto_now_add=True) 5 like_num = models.IntegerField(default=0) 6 7class Like(models.Model): 8 user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='like_user') 9 post = models.ForeignKey(Post, on_delete=models.CASCADE) 10 date_created = models.DateTimeField(auto_now_add=True)
views.py
python
1@login_required 2def like(request,post_id): 3 post = Post.objects.get(id=post_id) 4 is_like = Like.objects.filter(user=request.user).filter(post=post).count() 5 # unlike 6 if is_like > 0: 7 liking = Like.objects.get(post__id=post_id, user=request.user) 8 liking.delete() 9 post.like_num -= 1 10 post.save() 11 messages.warning(request, 'いいねを取り消しました') 12 return redirect ('post:post_detail', pk=post.pk) 13 # like 14 post.like_num += 1 15 post.save() 16 like = Like() 17 like.user = request.user 18 like.post = post 19 like.save() 20 messages.success(request, 'いいね!しました') 21 return redirect ('post:post_detail', pk=post.pk)
post_detail.html
python
1 {% for message in messages %} 2 <p> {{ message }}</p> 3 {% endfor %} 4 <a href="{% url 'post:like' post.id %}">いいねする</a>
views.py
python
1class PostDetailView(DetailView): 2 model = Post 3 4 def get_object(self, queryset=None): 5 obj = super().get_object(queryset=queryset) 6 if not obj.is_public and not self.request.user.is_authenticated: 7 raise Http404 8 return obj
urls.py
python
1path('<slug:post_id>/like/', like, name='like'), 2path('post/<slug:pk>/', PostDetailView.as_view(), name='post_detail'),
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/21 11:01
退会済みユーザー
2020/05/21 11:09
2020/05/21 11:10
退会済みユーザー
2020/05/22 02:44
2020/05/22 02:57
退会済みユーザー
2020/05/22 04:50
2020/05/22 06:16
退会済みユーザー
2020/05/22 08:18