from django import forms from django.contrib.auth.models import User from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from .models import Idea, IdeaComment class SignUpForm(forms.Form): ''' Each field (both passwords at once in their case) is checked with it's own function as by doing so all can be checked at once for errors and have errors thrown simultaneously. If the user happens to enter an email that already exists as well as a username that already exists and the two passwords don't match, then the user will be notified of all three errors without having to perform three correct_error - submit - read_error cycles ''' name = forms.CharField() email = forms.EmailField() password = forms.CharField(max_length = 50, min_length = 8, widget = forms.PasswordInput) password2 = forms.CharField(max_length = 50, min_length = 8, widget = forms.PasswordInput) # clean passwords, two fields can't be declared as above def clean(self): cleanName = self.cleaned_data['name'] nameExists = User.objects.filter(username = cleanName).count() if nameExists > 0 : raise ValidationError(_('Username already exists. Please try a different one.')) mail = self.cleaned_data['email'] emailExists = User.objects.filter(email = mail).count() if emailExists > 0 : raise ValidationError(_('An account already exists with the email provided. Please use a different email address, or log in.')) p1 = self.cleaned_data.get('password') p2 = self.cleaned_data.get('password2') if (p1 != p2): raise ValidationError(_('Passwords do not match.')) return self.cleaned_data class AddUserForm(forms.Form): name = forms.CharField() def clean(self): cleanName = self.cleaned_data['name'] nameExists = User.objects.filter(username = cleanName).count() if nameExists == 0 : raise ValidationError(_('Username does not exist. Are you sure you spelled it correctly?')) return self.cleaned_data class IdeaForm(forms.ModelForm): class Meta: model = Idea fields = ('text',) labels = { 'text': '', } widgets = { 'text': forms.Textarea(attrs = {'cols': 25}) } class CommentForm(forms.ModelForm): class Meta: model = IdeaComment fields = ('text',) labels = { 'text': '', } widgets = { 'text': forms.Textarea(attrs = {'cols': 40, 'rows': 3}) }