3 # Copyright (C) 2012 FinalsClub Foundation
5 from django.conf import settings
6 from django.forms import ModelForm
7 from django.forms import CharField
9 from ajax_select.fields import AutoCompleteSelectField
10 from ajax_select.fields import AutoCompleteSelectWidget
11 from ajax_select_cascade.fields import AutoCompleteDependentSelectField
12 from ajax_select_cascade.fields import AutoCompleteDependentSelectWidget
14 from karmaworld.apps.courses.models import Course
16 class CourseForm(ModelForm):
17 school = AutoCompleteSelectField(
19 widget=AutoCompleteSelectWidget(
21 attrs={'id': 'dom_autocomplete_school'}
24 department = AutoCompleteDependentSelectField(
26 widget=AutoCompleteDependentSelectWidget(
28 attrs={'data-upstream-id': 'dom_autocomplete_school'},
32 def __init__(self, *args, **kwargs):
33 """ Add a dynamically named field. """
34 super(CourseForm, self).__init__(*args, **kwargs)
35 self.fields[settings.HONEYPOT_FIELD_NAME] = CharField(required=False)
40 fields = ('school', 'department', 'name', 'instructor_name',
41 'instructor_email', 'url')
43 def clean(self, *args, **kwargs):
44 """ Additional form validation. """
46 # Call ModelFormMixin or whoever normally cleans house.
47 cleaned_data = super(CourseForm, self).clean(*args, **kwargs)
49 # parts of this code borrow from
50 # https://github.com/sunlightlabs/django-honeypot
51 hfn = settings.HONEYPOT_FIELD_NAME
52 formhoneypot = cleaned_data.get(hfn, None)
53 if formhoneypot and (formhoneypot != settings.HONEYPOT_VALUE):
54 # Highlight a failure to follow instructions.
55 # When the template dynamically generates the form, replace
57 self._errors['honeypot'] = [u'You did not follow directions.']