Mercurial > public > sg101
diff comments/forms.py @ 581:ee87ea74d46b
For Django 1.4, rearranged project structure for new manage.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 05 May 2012 17:10:48 -0500 |
parents | gpp/comments/forms.py@bbbc357ac5f3 |
children | 4619290d171d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/comments/forms.py Sat May 05 17:10:48 2012 -0500 @@ -0,0 +1,74 @@ +""" +Forms for the comments application. +""" +import datetime +from django import forms +from django.conf import settings +from django.contrib.contenttypes.models import ContentType + +from comments.models import Comment + +COMMENT_MAX_LENGTH = getattr(settings, 'COMMENT_MAX_LENGTH', 3000) + +class CommentForm(forms.Form): + comment = forms.CharField(label='', + min_length=1, + max_length=COMMENT_MAX_LENGTH, + widget=forms.Textarea(attrs={'class': 'markItUp smileyTarget'})) + content_type = forms.CharField(widget=forms.HiddenInput) + object_pk = forms.CharField(widget=forms.HiddenInput) + + def __init__(self, target_object, data=None, initial=None): + self.target_object = target_object + if initial is None: + initial = {} + initial.update({ + 'content_type': str(self.target_object._meta), + 'object_pk': str(self.target_object.pk), + }) + super(CommentForm, self).__init__(data=data, initial=initial) + + def get_comment_object(self, user, ip_address): + """ + Return a new (unsaved) comment object based on the information in this + form. Assumes that the form is already validated and will throw a + ValueError if not. + """ + if not self.is_valid(): + raise ValueError("get_comment_object may only be called on valid forms") + + new = Comment( + content_type = ContentType.objects.get_for_model(self.target_object), + object_id = self.target_object.pk, + user = user, + comment = self.cleaned_data["comment"], + ip_address = ip_address, + 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. + today = datetime.date.today() + possible_duplicates = Comment.objects.filter( + content_type = new.content_type, + object_id = new.object_id, + user = new.user, + creation_date__year = today.year, + creation_date__month = today.month, + creation_date__day = today.day, + ) + for old in possible_duplicates: + if old.comment == new.comment: + return old + + return new + + class Media: + css = { + 'all': (settings.GPP_THIRD_PARTY_CSS['markitup'] + + settings.GPP_THIRD_PARTY_CSS['jquery-ui']), + } + js = (settings.GPP_THIRD_PARTY_JS['markitup'] + + settings.GPP_THIRD_PARTY_JS['jquery-ui'] + + ['js/comments.js'])