Commit fdd1be6013261e29188cb37a82a36af61088e2c6

Authored by James Addison
1 parent 375d9fa8

Adding another level of abstract modeling for Comment

This will ensure that custom comment apps don't trigger table joins or require `select_related()` to be used. Documentation updated.
... ... @@ -43,7 +43,7 @@ class BaseCommentAbstractModel(models.Model):
43 43
44 44
45 45 @python_2_unicode_compatible
46   -class Comment(BaseCommentAbstractModel):
  46 +class CommentAbstractModel(BaseCommentAbstractModel):
47 47 """
48 48 A user comment about some object.
49 49 """
... ... @@ -76,7 +76,7 @@ class Comment(BaseCommentAbstractModel):
76 76 objects = CommentManager()
77 77
78 78 class Meta:
79   - db_table = "django_comments"
  79 + abstract = True
80 80 ordering = ('submit_date',)
81 81 permissions = [("can_moderate", "Can moderate comments")]
82 82 verbose_name = _('comment')
... ... @@ -88,7 +88,7 @@ class Comment(BaseCommentAbstractModel):
88 88 def save(self, *args, **kwargs):
89 89 if self.submit_date is None:
90 90 self.submit_date = timezone.now()
91   - super(Comment, self).save(*args, **kwargs)
  91 + super(CommentAbstractModel, self).save(*args, **kwargs)
92 92
93 93 def _get_userinfo(self):
94 94 """
... ... @@ -167,6 +167,11 @@ class Comment(BaseCommentAbstractModel):
167 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 175 @python_2_unicode_compatible
171 176 class CommentFlag(models.Model):
172 177 """
... ...
... ... @@ -61,21 +61,20 @@ the ``my_comment_app`` directory::
61 61 In the ``models.py`` we'll define a ``CommentWithTitle`` model::
62 62
63 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 67 title = models.CharField(max_length=300)
68 68
69 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 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 73 rewrite the templates, you could try subclassing from
74 74 ``BaseCommentAbstractModel``.
75 75
76 76 Next, we'll define a custom comment form in ``forms.py``. This is a little more
77 77 tricky: we have to both create a form and override
78   -``CommentForm.get_comment_model()`` and
79 78 ``CommentForm.get_comment_create_data()`` to return deal with our custom title
80 79 field::
81 80
... ...
Please register or login to post a comment