from django import forms from django.db.models import Count from .models import Course, Tag, Exam class TagModelMultipleChoiceField(forms.ModelMultipleChoiceField): def label_from_instance(self, obj): return f"{obj.name} ({obj.question_count})" class ExamModelMultipleChoiceField(forms.ModelMultipleChoiceField): def label_from_instance(self, obj): return f"{obj.course.name} - {obj.date}" class CreateQuizForm(forms.Form): course = forms.ModelChoiceField( queryset=Course.objects.all(), required=False, empty_label="Alla kurser", widget=forms.Select(attrs={'class': 'form-control'}) ) exams = ExamModelMultipleChoiceField( queryset=Exam.objects.all(), required=False, widget=forms.SelectMultiple(attrs={'class': 'form-control'}) ) tags = TagModelMultipleChoiceField( queryset=Tag.objects.annotate(question_count=Count('questions')).order_by('name'), required=False, widget=forms.SelectMultiple(attrs={'class': 'form-control'}) ) QUESTION_TYPES = [ ('single', 'Envalsfrågor'), ('multi', 'Flervalsfrågor'), ] question_type = forms.MultipleChoiceField( choices=QUESTION_TYPES, required=False, widget=forms.SelectMultiple(attrs={'class': 'form-control'}) )