view gpp/forums/forms.py @ 93:4c33e266db03

Forums: paginate the topic list inside a forum.
author Brian Neal <bgneal@gmail.com>
date Sun, 13 Sep 2009 04:33:15 +0000
parents 021492db4aad
children 23035afdeae8
line wrap: on
line source
"""
Forms for the forums application.
"""
from django import forms

from forums.models import Topic
from forums.models import Post


class PostForm(forms.Form):
    """Form for creating a new post."""
    body = forms.CharField(label='', widget=forms.Textarea)
    topic_id = forms.IntegerField(widget=forms.HiddenInput)
    topic = None

    class Media:
        js = ('js/forums.js', )

    def clean_topic_id(self):
        id = self.cleaned_data['topic_id']
        print '*********', id
        try:
            self.topic = Topic.objects.get(pk=id)
            print '******** Got a topic'
        except Topic.DoesNotExist:
            raise forms.ValidationError('invalid topic')
        return id 

    def save(self, user, ip=None):
        """
        Creates a new post from the form data and supplied arguments.
        """
        post = Post(topic=self.topic, user=user, body=self.cleaned_data['body'],
                user_ip=ip)
        post.save()
        return post


class NewTopicForm(forms.Form):
    """Form for creating a new topic and 1st post to that topic."""
    name = forms.CharField(label='Subject', max_length=255)
    body = forms.CharField(label='', widget=forms.Textarea)

    def save(self, forum, user, ip=None):
        """
        Creates the new Topic and first Post from the form data and supplied
        arguments.
        """
        topic = Topic(forum=forum,
                name=self.cleaned_data['name'],
                user=user)
        topic.save()

        post = Post(topic=topic,
                user=user,
                body=self.cleaned_data['body'],
                user_ip=ip)
        post.save()

        return topic