Commit e2d764da2cc5785743d09de1c3f7a79322e41474

Authored by Claude Paroz
2 parents b8a4f8d1 fdd1be60

Merge pull request #66 from jaddison/master

General improvements
1 from importlib import import_module 1 from importlib import import_module
2 2
  3 +from django.apps import apps
3 from django.conf import settings 4 from django.conf import settings
4 from django.core import urlresolvers 5 from django.core import urlresolvers
5 from django.core.exceptions import ImproperlyConfigured 6 from django.core.exceptions import ImproperlyConfigured
@@ -14,9 +15,9 @@ def get_comment_app(): @@ -14,9 +15,9 @@ def get_comment_app():
14 """ 15 """
15 # Make sure the app's in INSTALLED_APPS 16 # Make sure the app's in INSTALLED_APPS
16 comments_app = get_comment_app_name() 17 comments_app = get_comment_app_name()
17 - if comments_app not in settings.INSTALLED_APPS: 18 + if not apps.is_installed(comments_app):
18 raise ImproperlyConfigured( 19 raise ImproperlyConfigured(
19 - "The COMMENTS_APP (%r) must be in INSTALLED_APPS" % settings.COMMENTS_APP 20 + "The COMMENTS_APP (%r) must be in INSTALLED_APPS" % comments_app
20 ) 21 )
21 22
22 # Try to import the package 23 # Try to import the package
@@ -9,7 +9,8 @@ from django.utils.encoding import force_text @@ -9,7 +9,8 @@ from django.utils.encoding import force_text
9 from django.utils.text import get_text_list 9 from django.utils.text import get_text_list
10 from django.utils import timezone 10 from django.utils import timezone
11 from django.utils.translation import pgettext_lazy, ungettext, ugettext, ugettext_lazy as _ 11 from django.utils.translation import pgettext_lazy, ungettext, ugettext, ugettext_lazy as _
12 -from django_comments.models import Comment 12 +
  13 +from . import get_model
13 14
14 COMMENT_MAX_LENGTH = getattr(settings, 'COMMENT_MAX_LENGTH', 3000) 15 COMMENT_MAX_LENGTH = getattr(settings, 'COMMENT_MAX_LENGTH', 3000)
15 DEFAULT_COMMENTS_TIMEOUT = getattr(settings, 'COMMENTS_TIMEOUT', (2 * 60 * 60)) # 2h 16 DEFAULT_COMMENTS_TIMEOUT = getattr(settings, 'COMMENTS_TIMEOUT', (2 * 60 * 60)) # 2h
@@ -127,7 +128,7 @@ class CommentDetailsForm(CommentSecurityForm): @@ -127,7 +128,7 @@ class CommentDetailsForm(CommentSecurityForm):
127 comment apps should override this, get_comment_create_data, and perhaps 128 comment apps should override this, get_comment_create_data, and perhaps
128 check_for_duplicate_comment to provide custom comment models. 129 check_for_duplicate_comment to provide custom comment models.
129 """ 130 """
130 - return Comment 131 + return get_model()
131 132
132 def get_comment_create_data(self): 133 def get_comment_create_data(self):
133 """ 134 """
@@ -43,7 +43,7 @@ class BaseCommentAbstractModel(models.Model): @@ -43,7 +43,7 @@ class BaseCommentAbstractModel(models.Model):
43 43
44 44
45 @python_2_unicode_compatible 45 @python_2_unicode_compatible
46 -class Comment(BaseCommentAbstractModel): 46 +class CommentAbstractModel(BaseCommentAbstractModel):
47 """ 47 """
48 A user comment about some object. 48 A user comment about some object.
49 """ 49 """
@@ -76,7 +76,7 @@ class Comment(BaseCommentAbstractModel): @@ -76,7 +76,7 @@ class Comment(BaseCommentAbstractModel):
76 objects = CommentManager() 76 objects = CommentManager()
77 77
78 class Meta: 78 class Meta:
79 - db_table = "django_comments" 79 + abstract = True
80 ordering = ('submit_date',) 80 ordering = ('submit_date',)
81 permissions = [("can_moderate", "Can moderate comments")] 81 permissions = [("can_moderate", "Can moderate comments")]
82 verbose_name = _('comment') 82 verbose_name = _('comment')
@@ -88,7 +88,7 @@ class Comment(BaseCommentAbstractModel): @@ -88,7 +88,7 @@ class Comment(BaseCommentAbstractModel):
88 def save(self, *args, **kwargs): 88 def save(self, *args, **kwargs):
89 if self.submit_date is None: 89 if self.submit_date is None:
90 self.submit_date = timezone.now() 90 self.submit_date = timezone.now()
91 - super(Comment, self).save(*args, **kwargs) 91 + super(CommentAbstractModel, self).save(*args, **kwargs)
92 92
93 def _get_userinfo(self): 93 def _get_userinfo(self):
94 """ 94 """
@@ -167,6 +167,11 @@ class Comment(BaseCommentAbstractModel): @@ -167,6 +167,11 @@ class Comment(BaseCommentAbstractModel):
167 return _('Posted by %(user)s at %(date)s\n\n%(comment)s\n\nhttp://%(domain)s%(url)s') % d 167 return _('Posted by %(user)s at %(date)s\n\n%(comment)s\n\nhttp://%(domain)s%(url)s') % d
168 168
169 169
  170 +class Comment(CommentAbstractModel):
  171 + class Meta(CommentAbstractModel.Meta):
  172 + db_table = "django_comments"
  173 +
  174 +
170 @python_2_unicode_compatible 175 @python_2_unicode_compatible
171 class CommentFlag(models.Model): 176 class CommentFlag(models.Model):
172 """ 177 """
@@ -61,21 +61,20 @@ the ``my_comment_app`` directory:: @@ -61,21 +61,20 @@ the ``my_comment_app`` directory::
61 In the ``models.py`` we'll define a ``CommentWithTitle`` model:: 61 In the ``models.py`` we'll define a ``CommentWithTitle`` model::
62 62
63 from django.db import models 63 from django.db import models
64 - from django_comments.models import Comment 64 + from django_comments.models import CommentAbstractModel
65 65
66 - class CommentWithTitle(Comment): 66 + class CommentWithTitle(CommentAbstractModel):
67 title = models.CharField(max_length=300) 67 title = models.CharField(max_length=300)
68 68
69 Most custom comment models will subclass the 69 Most custom comment models will subclass the
70 -:class:`~django_comments.models.Comment` model. However, 70 +:class:`~django_comments.models.CommentAbstractModel` model. However,
71 if you want to substantially remove or change the fields available in the 71 if you want to substantially remove or change the fields available in the
72 -:class:`~django_comments.models.Comment` model, but don't want to 72 +:class:`~django_comments.models.CommentAbstractModel` model, but don't want to
73 rewrite the templates, you could try subclassing from 73 rewrite the templates, you could try subclassing from
74 ``BaseCommentAbstractModel``. 74 ``BaseCommentAbstractModel``.
75 75
76 Next, we'll define a custom comment form in ``forms.py``. This is a little more 76 Next, we'll define a custom comment form in ``forms.py``. This is a little more
77 tricky: we have to both create a form and override 77 tricky: we have to both create a form and override
78 -``CommentForm.get_comment_model()`` and  
79 ``CommentForm.get_comment_create_data()`` to return deal with our custom title 78 ``CommentForm.get_comment_create_data()`` to return deal with our custom title
80 field:: 79 field::
81 80
@@ -86,10 +85,6 @@ field:: @@ -86,10 +85,6 @@ field::
86 class CommentFormWithTitle(CommentForm): 85 class CommentFormWithTitle(CommentForm):
87 title = forms.CharField(max_length=300) 86 title = forms.CharField(max_length=300)
88 87
89 - def get_comment_model(self):  
90 - # Use our custom comment model instead of the default one.  
91 - return CommentWithTitle  
92 -  
93 def get_comment_create_data(self): 88 def get_comment_create_data(self):
94 # Use the data of the superclass, and add in the title field 89 # Use the data of the superclass, and add in the title field
95 data = super(CommentFormWithTitle, self).get_comment_create_data() 90 data = super(CommentFormWithTitle, self).get_comment_create_data()
Please register or login to post a comment