Commit 7d4a9548 authored by Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss
Browse files

Refactored CommentForm.get_comment_object into a handful of separete methods...

Refactored CommentForm.get_comment_object into a handful of separete methods to make it easier for subclasses to provide custom models and data. Refs #8630.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9889 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 542709d0
Loading
Loading
Loading
Loading
+31 −8
Original line number Diff line number Diff line
@@ -46,7 +46,27 @@ class CommentForm(forms.Form):
        if not self.is_valid():
            raise ValueError("get_comment_object may only be called on valid forms")
        
        new = Comment(
        CommentModel = self.get_comment_model()
        new = CommentModel(**self.get_comment_create_data())
        new = self.check_for_duplicate_comment(new)
        
        return new
        
    def get_comment_model(self):
        """
        Get the comment model to create with this form. Subclasses in custom
        comment apps should override this, get_comment_create_data, and perhaps
        check_for_duplicate_comment to provide custom comment models.
        """
        return Comment
        
    def get_comment_create_data(self):
        """
        Returns the dict of data to be used to create a comment. Subclasses in
        custom comment apps that override get_comment_model can override this
        method to add extra fields onto a custom comment model.
        """
        return dict(
            content_type = ContentType.objects.get_for_model(self.target_object),
            object_pk    = force_unicode(self.target_object._get_pk_val()),
            user_name    = self.cleaned_data["name"],
@@ -59,9 +79,12 @@ class CommentForm(forms.Form):
            is_removed   = False,
        )
        
        # Check that this comment isn't duplicate. (Sometimes people post comments
        # twice by mistake.) If it is, fail silently by returning the old comment.
        possible_duplicates = Comment.objects.filter(
    def check_for_duplicate_comment(self, new):
        """
        Check that a submitted comment isn't a duplicate. This might be caused
        by someone posting a comment twice. If it is a dup, silently return the *previous* comment.
        """
        possible_duplicates = self.get_comment_model()._default_manager.filter(
            content_type = new.content_type,
            object_pk = new.object_pk,
            user_name = new.user_name,