Fixed #9303: comment templatetags no longer assume the built-in comment model.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9891 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2009-02-23 22:46:32 +00:00
parent 63d85a684a
commit 1aac357d34
1 changed files with 10 additions and 1 deletions

View File

@ -3,6 +3,7 @@ from django.template.loader import render_to_string
from django.conf import settings from django.conf import settings
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib import comments from django.contrib import comments
from django.db.models import FieldDoesNotExist
from django.utils.encoding import smart_unicode from django.utils.encoding import smart_unicode
register = template.Library() register = template.Library()
@ -82,7 +83,15 @@ class BaseCommentNode(template.Node):
site__pk = settings.SITE_ID, site__pk = settings.SITE_ID,
is_public = True, is_public = True,
) )
if getattr(settings, 'COMMENTS_HIDE_REMOVED', True):
# The is_public and is_removed fields are implementation details of the
# built-in comment model's spam filtering system, so they might not
# be present on a custom comment model subclass. If they exist, we
# should filter on them.
field_names = [f.name for f in self.comment_model._meta.fields]
if 'is_public' in field_names:
qs = qs.filter(is_public=True)
if getattr(settings, 'COMMENTS_HIDE_REMOVED', True) and 'is_removed' in field_names:
qs = qs.filter(is_removed=False) qs = qs.filter(is_removed=False)
return qs return qs