python - 根据属性的值在 Django 项目中使用信号删除通知
问题描述
每次用户向帖子提交“喜欢”按钮时,我都会添加一个通知,被喜欢的帖子的所有者会收到通知,但现在我每次通过不喜欢或喜欢单击按钮时都会收到通知,所以我增加了价值像这样它可以是Like
和Unlike
。
所以,现在在通知中我添加了删除选项,但我有点困惑如何设置删除通知,如果 like 的值为Unlike
,以防止收到不需要的通知。
这是帖子models.py
class Post(models.Model):
title = models.CharField(max_length=100, unique=True)
likes = models.ManyToManyField(User, related_name='liked', blank=True)
这是喜欢的models.py
LIKE_CHOICES = (
('Like', 'Like'),
('Unlike', 'Unlike')
)
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)
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
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)
这是通知models.py
class Notification(models.Model):
NOTIFICATION_TYPES=((1,'Like'),(2,'Comment'),(3,'Follow'))
post = models.ForeignKey('blog.Post', on_delete=models.CASCADE, related_name="noti_post", blank=True, null=True)
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="noti_from_user")
user = models.ForeignKey(User, on_delete=models.CASCADE,related_name="noti_to_user")
notification_type= models.IntegerField(choices=NOTIFICATION_TYPES)
text_preview= models.CharField(max_length=90,blank=True)
date=models.DateTimeField(auto_now=True)
is_seen=models.BooleanField(default=False)
这是views.py,我评论了我的试用版,因为它不起作用
def ShowNotifications(request):
user=request.user
notifications= Notification.objects.filter(user=user).order_by('-date')
template= loader.get_template('notifications/notifications.html')
# if Like.value == 'Like':
# return Like.user_liked_post
# if Like.value == 'Unlike':
# return Like.user_unlike_post
context= {
'notifications':notifications
}
return HttpResponse(template.render(context, request))
目前的情况:
- 目前当用户点赞时发送通知
- 当同一用户不喜欢时,也会发送喜欢通知
所需输出:
- 当用户喜欢时发送通知
- 当同一用户与之前发送的通知不同时被删除
解决方案
推荐阅读
- asp.net - 无法使用 GetDelegateForFunctionPointer 注册 COM DLL
- css - 如何悬停不同大小的图片
- jquery - 在 jqgrid 和 jquery highlight 上编辑数据时出现问题跨度类
- swift - ios pushkit 在 reportnewIncommingCall 之前结束最后一次通话
- firebase - 使用 firebase-admin 将图像上传到 Firebase 存储
- r - 如何在 R 中“重启”cur_group_id()
- mysql - 我怎样才能像mysql一样在oracle中编写rank sql
- google-colaboratory - 使用 torchvision 下载的数据集在哪里?
- protocol-buffers - 如何使用自定义键实现包含地图的 Google Protobuf
- c# - C# TreeView 选定节点在移动该节点后失去焦点