django-anonsurvey/anonsurvey/admin.py

75 lines
2.5 KiB
Python

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)