python - 使用信号更新 django 中的通知模型
问题描述
我正在做一个图书库存项目。我正在尝试在添加新书后立即向用户发送通知。
我已经建立了这个通知模型:
...
class Notification(models.Model):
title =models.CharField(max_length =255)
message =models.TextField()
viewed =models.BooleanField(default =False)
user =models.ForeignKey(settings.AUTH_USER_MODEL,on_delete =models.CASCADE,)
def __str__(self):
return self.title
我能够构建在控制台中打印“已添加图书”的 post_save 信号。虽然我在将值保存在通知表中时面临挑战这是信号.py 文件:
from django.db.models.signals import post_save
# from django.dispatch import receiver
from books.models import Book
from .models import Notification
# @receiver(post_save,sender =Book)
def book_add_notify(sender,**kwargs):
print('Book is added')
Notification.objects.create(user =kwargs.get('instance'),
title ='Thanks for adding your book!',
message='Your book has been successfully Added')
post_save.connect(book_add_notify,sender =Book)
这是我收到的错误消息:
/books/new/ 处的 ValueError 无法分配“”:“Notification.user”必须是“CustomUser”实例。
我不确定如何处理这个 CustomUser 错误。让我知道是否需要更多信息。
解决方案
信号由 Book 对象发送,因此您的实例是 Book 对象。您应该在 Notification.objects.create() 中传递一个 CustomUser 对象,您将在哪里获得 CustomUser 对象取决于您的应用程序。从外表上看,可能是一位书籍作者。
推荐阅读
- flutter - Flutter 有除了 material 和 cupertino 之外的小部件吗?
- javascript - 在 foreach 循环中单击一个面板时折叠其他面板
- ruby - 理解 Ruby 中的“.with”
- php - 在 WooCommerce 的地址字段中需要文本和数字
- server - 设置传送 - 使用 Let's Encrypt 配置域名并获取 TLS 证书
- ios - 如何将 Swift 代码(类)与 Objective-C 结合起来?
- database - Clickhouse数据库中的物化视图不显示数据
- java - 如何使用带有日历对象的 AM PM 设置正确的时间?
- node.js - MongoDB搜索多个集合
- c++ - 左移一个数字