Commit e2d764da2cc5785743d09de1c3f7a79322e41474
Merge pull request #66 from jaddison/master
General improvements
Showing
4 changed files
with
18 additions
and
16 deletions
| 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