X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/d0f0e1412cc42d366b234e798dfb68feed05d751..d555d988764995ea1f9f5ece46f453a66f09b334:/src/forum/forms.py?ds=inline diff --git a/src/forum/forms.py b/src/forum/forms.py new file mode 100644 index 0000000..37c9b35 --- /dev/null +++ b/src/forum/forms.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +from django import forms +from django.forms.models import ModelChoiceIterator +from django.utils.translation import ugettext as _ +import pybb.forms + +from catalogue.models import Lesson + + +class GroupedModelChoiceIterator(ModelChoiceIterator): + def __init__(self, field): + super(GroupedModelChoiceIterator, self).__init__(field) + self.queryset = self.field.grouping_model.objects + self.items_queryset = self.field.queryset + + def choice(self, obj): + items_query = self.items_queryset.filter(**{self.field.grouping_fk_field: obj}) + items = [super(GroupedModelChoiceIterator, self).choice(item) for item in items_query.all()] + return unicode(obj), items + + +class GroupedModelChoiceField(forms.ModelChoiceField): + + def __init__(self, queryset, grouping_fk_field, **kwargs): + self.grouping_fk_field = grouping_fk_field + self.grouping_model = queryset.model._meta.get_field(grouping_fk_field).rel.to + super(GroupedModelChoiceField, self).__init__(queryset, **kwargs) + + def _get_choices(self): + toret = super(GroupedModelChoiceField, self)._get_choices() + if isinstance(toret, ModelChoiceIterator): + toret = GroupedModelChoiceIterator(self) + return toret + + choices = property(_get_choices, forms.ModelChoiceField.choices.fset) + + +class PostForm(pybb.forms.PostForm): + lesson = GroupedModelChoiceField( + label=_('Related lesson'), queryset=Lesson.objects.all(), + grouping_fk_field='section', required=False)