summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2009-02-23 22:16:00 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2009-02-23 22:16:00 +0000
commit7d4a954836069d740d24101078cfadb4580533c2 (patch)
tree7020a923e47c4d8532fead04bd94dceea2edcd8b
parent542709d0d1796326dd1edacf32fc1198cfad2869 (diff)
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
-rw-r--r--django/contrib/comments/forms.py39
1 files changed, 31 insertions, 8 deletions
diff --git a/django/contrib/comments/forms.py b/django/contrib/comments/forms.py
index 5d71a3909b..f358b8132b 100644
--- a/django/contrib/comments/forms.py
+++ b/django/contrib/comments/forms.py
@@ -33,7 +33,7 @@ class CommentForm(forms.Form):
initial = {}
initial.update(self.generate_security_data())
super(CommentForm, self).__init__(data=data, initial=initial)
-
+
def get_comment_object(self):
"""
Return a new (unsaved) comment object based on the information in this
@@ -45,8 +45,28 @@ 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"],
@@ -58,10 +78,13 @@ class CommentForm(forms.Form):
is_public = True,
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,
@@ -71,7 +94,7 @@ class CommentForm(forms.Form):
for old in possible_duplicates:
if old.submit_date.date() == new.submit_date.date() and old.comment == new.comment:
return old
-
+
return new
def security_errors(self):