Source code for mezzanine.generic.managers
from __future__ import unicode_literals
from django_comments.managers import CommentManager as DjangoCM
from mezzanine.conf import settings
from mezzanine.core.managers import CurrentSiteManager
[docs]class CommentManager(CurrentSiteManager, DjangoCM):
"""
Provides filter for restricting comments that are not approved
if ``COMMENTS_UNAPPROVED_VISIBLE`` is set to ``False``.
"""
[docs] def visible(self):
"""
Return the comments that are visible based on the
``COMMENTS_XXX_VISIBLE`` settings. When these settings
are set to ``True``, the relevant comments are returned
that shouldn't be shown, and are given placeholders in
the template ``generic/includes/comment.html``.
"""
visible = self.all()
if not settings.COMMENTS_UNAPPROVED_VISIBLE:
visible = visible.filter(is_public=True)
if not settings.COMMENTS_REMOVED_VISIBLE:
visible = visible.filter(is_removed=False)
return visible
[docs] def count_queryset(self):
"""
Called from ``CommentsField.related_items_changed`` to store
the comment count against an item each time a comment is saved.
"""
return self.visible().count()
class KeywordManager(CurrentSiteManager):
def get_by_natural_key(self, value):
"""
Provides natural key method.
"""
return self.get(value=value)
def get_or_create_iexact(self, **kwargs):
"""
Case insensitive title version of ``get_or_create``. Also
allows for multiple existing results.
"""
lookup = dict(**kwargs)
try:
lookup["title__iexact"] = lookup.pop("title")
except KeyError:
pass
try:
return self.filter(**lookup)[0], False
except IndexError:
return self.create(**kwargs), True
def delete_unused(self, keyword_ids=None):
"""
Removes all instances that are not assigned to any object. Limits
processing to ``keyword_ids`` if given.
"""
if keyword_ids is None:
keywords = self.all()
else:
keywords = self.filter(id__in=keyword_ids)
keywords.filter(assignments__isnull=True).delete()