Обновление модели уведомлений в django с использованием сигналов - PullRequest
0 голосов
/ 12 апреля 2020

Я работаю над проектом инвентаризации книг. Я пытаюсь отправить уведомление пользователю, как только добавляется новая книга.

Я построил эту модель уведомления:

...
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, который печатает «Книга добавлена» в консоли. Хотя я сталкиваюсь с проблемой сохранения значения в таблице уведомлений. Это файл signal.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)

Это сообщение об ошибке, которое я получаю:

ValueError в / books / new / Cannot assign "": "Notification.user" должен быть экземпляром "CustomUser".

Я не уверен, как обработать эту ошибку CustomUser. Дайте мне знать, если потребуется дополнительная информация.

1 Ответ

1 голос
/ 12 апреля 2020

Сигнал отправляется объектом Book, поэтому ваш экземпляр является объектом Book. Вы должны передавать объект CustomUser в Notification.objects.create (). Где вы собираетесь получить объект CustomUser, зависит от вашего приложения. Может быть, автор книги по внешнему виду.

...