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'
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