X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/a1247c46b02c89a7d80fed36c89ce8476d0eac79..a995c5d7c893b45ab2bd81d9cec4e0e98227f66a:/forum/forms.py?ds=sidebyside diff --git a/forum/forms.py b/forum/forms.py index ec8a3be..37c9b35 100644 --- a/forum/forms.py +++ b/forum/forms.py @@ -1,10 +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 = forms.ModelChoiceField(label = _('Related lesson'), queryset = Lesson.objects.all(), required = False) - \ No newline at end of file + lesson = GroupedModelChoiceField( + label=_('Related lesson'), queryset=Lesson.objects.all(), + grouping_fk_field='section', required=False)