Django notification giving error for other model
Asked Answered
C

0

1

Following code is working for comment section.

from django.db import models
from django.contrib.sites.models import Site
from django.db.models import signals
from notification import models as notification

def new_comment(sender, instance, created, **kwargs):
    # remove this if-block if you want notifications for comment edit too
    if not created:
        return None

    context = {
        'comment': instance,
        'site': Site.objects.get_current(),
    }
    recipients = []

    # add all users who commented the same object to recipients
    for comment in instance.__class__.objects.for_model(instance.content_object):
        if comment.user not in recipients and comment.user != instance.user:
            recipients.append(comment.user)

    # if the commented object is a user then notify him as well
    if isinstance(instance.content_object, models.get_model('auth', 'User')):
        # if he his the one who posts the comment then don't add him to recipients
        if instance.content_object != instance.user and instance.content_object not in recipients:
            recipients.append(instance.content_object)

    notification.send(recipients, 'friends_invite', context)

signals.post_save.connect(new_comment, sender=models.get_model('comments', 'Comment'))

But when we implement the same code for other custome model comment then it giving error at the time of entering the record in model.

from django.db import models
from django.contrib.sites.models import Site
from django.db.models import signals
from notification import models as notification

def create_notice_types(app, created_models, verbosity, **kwargs):
        notification.create_notice_type("friends_invite", _("Invitation Received"), _("you have received an invitation"))
        notification.create_notice_type("friends_accept", _("Acceptance Received"), _("an invitation you sent has been accepted"))

signals.post_syncdb.connect(create_notice_types, sender=notification)

    def new_comment(sender, instance, created, **kwargs):
        # remove this if-block if you want notifications for comment edit too
        if not created:
            return None

        context = {
            'gufeed_feedcomment': instance,
        }
        recipients = []

        # add all users who commented the same object to recipients
        for comment in instance.__class__.objects.for_model(instance.content_object):
            if comment.user not in recipients and comment.user != instance.user:
                recipients.append(comment.user)

        # if the commented object is a user then notify him as well
        if isinstance(instance.content_object, models.get_model('auth', 'User')):
            # if he his the one who posts the comment then don't add him to recipients
            if instance.content_object != instance.user and instance.content_object not in recipients:
                recipients.append(instance.content_object)

        notification.send(recipients, 'friends_invite', context)

    signals.post_save.connect(new_comment, sender=models.get_model('gufeed_feedcomment', 'FeedHottPoint'))

Note: we are taking friends_invite notification type this is already created

ERROR: AttributeError at /gufeed/comment/add/ 'Manager' object has no attribute 'for_model'

Cadena answered 22/1, 2015 at 14:6 Comment(1)
I don't understand what instance.__class__.objects.for_model(instance.content_object) is supposed to be doing. Is that trying to use ContentType? If so, it's a very bizarre way of doing so.Romelda

© 2022 - 2024 — McMap. All rights reserved.