from django.contrib import admin from anonsurvey.models import Survey, QuestionGroup, Question,\ OfferedAnswer from django import forms from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ValidationError class QuestionInline(admin.StackedInline): model = Question extra = 1 class SurveyAdmin(admin.ModelAdmin): prepopulated_fields = {'name': ('title',)} fields = ('title', 'name', 'intro', 'active') list_display = ('name', 'title', 'active') search_fields = ('title', 'intro') list_filter = ('active',) inlines = [QuestionInline] class OfferedAnswerInlineFormSet(forms.models.BaseInlineFormSet): def clean(self): super(OfferedAnswerInlineFormSet, self).clean() cnt = 0 question = None for form in self.forms: if not hasattr(form, 'cleaned_data'): continue data = form.cleaned_data if 'answer_type' in data and data['answer_type'] == 'I': cnt += 1 if not question: question = data['question'] if question and question.question_type in ('CI', 'RI') and cnt > 1: raise ValidationError(_('Choice with input and multiple choice' ' with input type of question cannot have' ' more than one input type of answer')) class OfferedAnswerInline(admin.StackedInline): model = OfferedAnswer formset = OfferedAnswerInlineFormSet extra = 1 class QuestionAdmin(admin.ModelAdmin): inlines = [OfferedAnswerInline] list_display = ('survey', 'question_group', 'text', ) search_fields = ('text', 'offeredanswer__prefix', 'offeredanswer__answer_type', 'offeredanswer__text', 'offeredanswer__sufix',) list_filter = ('question_type', 'requires_answer', ) class QuestionGroupAdmin(admin.ModelAdmin): list_display = ('survey', 'text', ) search_fields = ('text', ) inlines = [QuestionInline] class OfferedAnswerAdmin(admin.ModelAdmin): list_display = ('question', 'prefix', 'text', 'sufix', 'sort_index') search_fields = ('question__text', 'prefix', 'text', 'sufix') list_filter = ('answer_type', 'question', 'question__survey') admin.site.register(Survey, SurveyAdmin) admin.site.register(QuestionGroup, QuestionGroupAdmin) admin.site.register(Question, QuestionAdmin) admin.site.register(OfferedAnswer, OfferedAnswerAdmin)