在Django Rest Framework中,有一个comment评论模型中有content(TextField)字段、student(ForeignKey)字段。还有一个Notification通知模型中content(TextField)字段、student(ForeignKey)字段,现在需要一个通知功能,该功能为:每当有一个comment生成,就向student发送一个通知。
时间: 2024-03-10 17:46:15 浏览: 81
为现该功能,你可以在comment模型的save方法中进行处理。具体步骤如下:
1. 在comment模型中重写save方法,并在该方法中向Notification模型中插入一条数据。
2. 在save方法中,通过self.student获取到对应的student实例,然后创建一个Notification实例,并将content和student字段进行赋值。
3. 调用Notification实例的save方法,保存该通知信息。
具体实现代码如下:
```python
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# 其他字段...
class Comment(models.Model):
content = models.TextField()
student = models.ForeignKey(Student, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
# 调用父类的save方法
super().save(*args, **kwargs)
# 创建通知实例并保存
Notification.objects.create(
content='您收到了一条新的评论:{}'.format(self.content),
student=self.student
)
class Notification(models.Model):
content = models.TextField()
student = models.ForeignKey(Student, on_delete=models.CASCADE)
@receiver(post_save, sender=Comment)
def create_notification(sender, instance, **kwargs):
# 在comment保存后会自动触发post_save信号,从而向student发送一条通知
instance.save()
```
在上述代码中,我们通过Django的信号机制,为Comment模型的post_save信号绑定了create_notification函数,从而实现了评论保存后自动向student发送通知的功能。
阅读全文