ユーザーが投稿を高く評価したときに以前に送信された通知の削除に問題があります。
まず、正常に機能している投稿に関連する「いいね」ボタンがあります。
私の問題私は投稿モデルと類似モデル(多対多の関係)を持っており、ユーザーが投稿を高く評価するためにクリックすると信号が送信されて通知が作成される通知モデルから信号を作成しました。だが同じユーザーの場合、私は論理に苦労しています
Unlike
投稿(「いいね」ボタンを2回クリック)で、作成した通知をまったく同じユーザーから削除するためのシグナルを送信したいと思います。
だから現在ここに何が起こっているのですか:
Like
Unike
必要な結果:
- 投稿が削除されることを希望したという以前に作成者に送信された通知
私が欲しいのは、投稿が拒否されたときに以前に送信された通知を削除することです
これがポストモデルに関連する私のModels.pyです:
class Post(models.Model):
title = models.CharField(max_length=100, unique=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='author')
num_likes = models.IntegerField(default=0, verbose_name='No. of Likes')
likes = models.ManyToManyField(User, related_name='liked', blank=True)
これがviews.pyです:
class PostDetailView(DetailView):
model = Post
template_name = "blog/post_detail.html"
def get_context_data(self, *args, **kwargs):
context = super(PostDetailView, self).get_context_data()
post = get_object_or_404(Post, slug=self.kwargs['slug'])
total_likes = post.total_likes()
liked = False
if post.likes.filter(id=self.request.user.id).exists():
liked = True
post_likes = post.likes.all()
context["liked"] = liked
context["post_likes"] = post_likes
return context
Models.pyのように:
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
value = models.CharField(choices=LIKE_CHOICES, default='Like', max_length=8)
def user_liked_post(sender, instance, *args, **kwargs):
like = instance
if like.value=='Like':
post = like.post
sender = like.user
notify = Notification(post=post, sender=sender, user=post.author, notification_type=1)
notify.save()
def user_unlike_post(sender, instance, *args, **kwargs):
like = instance
post = like.post
sender = like.user
notify = Notification.objects.filter(post=post, sender=sender, user=post.author, notification_type=1)
notify.delete()
post_save.connect(Like.user_liked_post, sender=Like)
post_delete.connect(Like.user_unlike_post, sender=Like)
これがlikeviews.pyです:
def LikeView(request):
post = get_object_or_404(Post, id=request.POST.get('id'))
liked = False
current_likes = post.num_likes
user = request.user
if post.author.id == request.user.id:
messages.warning(request, 'You can not like you own Post')
else:
like, created = Like.objects.get_or_create(user=user, post=post)
sender = like.user
if not created:
if like.value == 'Like':
like.value = 'Unlike'
like.user_unliked_post(sender=sender, post=post) <------- My trial
else:
like.value = 'Like'
like.save()
context = {
'total_likes': post.total_likes,
'liked': liked,
'post': post,
}
if request.is_ajax:
html = render_to_string('blog/like_section.html', context, request=request)
return JsonResponse({'form': html})
追加しようとしました
user_unlike_post
の中に
LikeView
しかし、私はエラーが発生しています
AttributeError: 'Like' object has no attribute 'user_unliked_post'
前の信号をから削除しようとするのが正しいかどうかはわかりません
LikeView
。
ユーザーが投稿とは異なるときに送信された以前の通知を削除するにはどうすればよいですか?
回答 1 件
関連記事
- DjangoプロジェクトはCpanelでホストされていません
- Djangocookiecutterプロジェクトコードが実行されない
- モジュールを新しいDjangoプロジェクトにロードできません
- google fontsapiの代わりにdjangoプロジェクトでダウンロードしたフォントを使用する方法
- 以前にJava11 jreで1つのプロジェクトを構成したときに、Eclipseを開くことができませんでした
- 簡単なdjangoプロジェクトでgitlabCIをセットアップする
- Gitlab CIでDjangoプロジェクトのSeleniumテストを実行します:getlive_server_urlでERR_CONNECTION_REFUSED
- djangoプロジェクトでカスタムテンプレートタグを作成する方法
- フォームの送信中にdjangoプロジェクトでエラーが発生しました。エラーの修正を教えてください。
関連した質問
- DjangoAdminで多対多モデルのすべてのフィールドを表示するにはどうすればよいですか?
- Djangoフォームのドロップダウンのラベルを変更するにはどうすればよいですか?
- Djangoモデルフォームベースのシステムをサインアップ用の生のHTMLベースのフォームシステムに変換します
- Djangoで1対1のテーブルフィールド値にアクセスする
- DetailViewを介してURLパスを作成しようとしていますが、HTMLページで重複する値を取得しています
- Djangoのデフォルトのモデルフォームを使用せずに、Djangoの同じページで複数のフォームを処理する
- Django:フォームが無効な場合にフォームがリセットされないようにする
- Djangoは同じファイルでNameERRORをモデル化しますか?
- djangoチャネルを使用してPython36からPython37にアップグレードする際のSynchronousOnlyOperationエラー
- Django管理者の承認を得て登録するにはどうすればよいですか?
関数を作成できます
delete_notification
次のように。そして、で関数を呼び出します
LikeView
。それがうまくいくことを願っています。
また、両方が
user_liked_post
そしてuser_unlike_post
メソッドがありませんself
あなたの議論Like
モデル。