ユーザーが「いいね」ボタンを投稿に送信するたびに、「いいね」の投稿の所有者が通知を受け取るという通知を追加しました。
「いいね」ボタンごとに「いいね」または「いいね」の値オプションを設定しました。クリックした「いいね」の値が「いいね」のみの場合にのみ通知を送信するように制限しました。
そのため、Likeモデルにシグナルを追加し、Like.value == Likeの場合はシグナルがアクティブになるが、何らかの理由で、新しい投稿が作成され、新しいユーザーが「いいね」をクリックした場合にのみ2回送信されるという条件を追加しました。初めて、その後、彼がユニケして再び好きなら、それは一度送られます。
私の質問は:
新しいユーザーが「いいね」ボタンをクリックするたびに信号が複製されるのはなぜですか? それを修正する方法は?
これが投稿models.pyです:
class Post(models.Model):
title = models.CharField(max_length=100, unique=True)
likes = models.ManyToManyField(User, related_name='liked', blank=True)
これがLikemodel.pyです:
LIKE_CHOICES = (
('Like', 'Like'),
('Unlike', 'Unlike')
)
class Like(models.Model):
# To know Who liked
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)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.post}-{self.user}-{self.value}"
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()
# Likes
post_save.connect(Like.user_liked_post, sender=Like)
post_delete.connect(Like.user_unlike_post, sender=Like)
これがviews.pyです:
def ShowNotifications(request):
user=request.user
notifications= Notification.objects.filter(user=user).order_by('-date')
template= loader.get_template('notifications/notifications.html')
context= {
'notifications':notifications
}
return HttpResponse(template.render(context, request))
関連した質問
- DjangoAdminで多対多モデルのすべてのフィールドを表示するにはどうすればよいですか?
- Djangoフォームのドロップダウンのラベルを変更するにはどうすればよいですか?
- 外部キーを介して接続された別のモデルのフィールドを使用してDjangoフィルターデータ
- Djangoモデルフォームベースのシステムをサインアップ用の生のHTMLベースのフォームシステムに変換します
- Djangoで1対1のテーブルフィールド値にアクセスする
- DetailViewを介してURLパスを作成しようとしていますが、HTMLページで重複する値を取得しています
- Djangoのデフォルトのモデルフォームを使用せずに、Djangoの同じページで複数のフォームを処理する
- Django:フォームが無効な場合にフォームがリセットされないようにする
- Djangoは同じファイルでNameERRORをモデル化しますか?
- djangoチャネルを使用してPython36からPython37にアップグレードする際のSynchronousOnlyOperationエラー
あなたはこの方法を試すことができます:
いいねしたレコードを削除しているので、レコードのステータスは決してなりません
unlike
そしてそのupdated
フィールドも更新されません。 したがって、更新フィールドと値フィールドをから削除しますLike
モデル。そして、以下の行であなたはフェッチしています
author
からPost
モデルですが、著者フィールドがありませんPost
モデル。