Add active Klass manager

This commit is contained in:
Claude Paroz 2018-06-16 18:14:29 +02:00
parent 386d34f63b
commit 772b0b6b01
3 changed files with 15 additions and 11 deletions

View file

@ -5,7 +5,6 @@ import zipfile
from django import forms
from django.contrib import admin
from django.db import models
from django.db.models import Case, Count, When
from django.http import HttpResponse
from django.urls import reverse
from django.utils.html import format_html
@ -63,9 +62,7 @@ class ArchivedListFilter(admin.BooleanFieldListFilter):
class KlassRelatedListFilter(admin.RelatedFieldListFilter):
def field_choices(self, field, request, model_admin):
return [
(k.pk, k.name) for k in Klass.objects.annotate(
num_students=Count(Case(When(student__archived=False, then=1)))
).filter(num_students__gt=0).order_by('name')
(k.pk, k.name) for k in Klass.active.order_by('name')
]

View file

@ -4,6 +4,7 @@ from datetime import date, timedelta
from django.conf import settings
from django.db import models
from django.db.models import Case, Count, When
from . import utils
@ -47,6 +48,13 @@ class Level(models.Model):
return None
class ActiveKlassManager(models.Manager):
def get_queryset(self):
return super().get_queryset().annotate(
num_students=Count(Case(When(student__archived=False, then=1)))
).filter(num_students__gt=0)
class Klass(models.Model):
name = models.CharField(max_length=10, verbose_name='Nom', unique=True)
section = models.ForeignKey(Section, verbose_name='Filière', on_delete=models.PROTECT)
@ -54,6 +62,9 @@ class Klass(models.Model):
teacher = models.ForeignKey('Teacher', blank=True, null=True,
on_delete=models.SET_NULL, verbose_name='Maître de classe')
objects = models.Manager()
active = ActiveKlassManager()
class Meta:
verbose_name = "Classe"

View file

@ -15,7 +15,7 @@ from django.contrib import messages
from django.core.files import File
from django.core.mail import EmailMessage
from django.db import transaction
from django.db.models import Case, Count, Value, When, Q, Sum
from django.db.models import Count, Value, Q, Sum
from django.db.models.functions import Concat
from django.http import HttpResponse, HttpResponseNotAllowed, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect
@ -83,8 +83,7 @@ class CorporationView(DetailView):
class KlassListView(ListView):
queryset = Klass.objects.all().annotate(num_students=Count(Case(When(student__archived=False, then=1)))
).filter(num_students__gt=0).order_by('section', 'name')
queryset = Klass.active.order_by('section', 'name')
template_name = 'classes.html'
@ -1043,10 +1042,7 @@ def print_mentor_ede_compensation_form(request, pk):
def print_klass_list(request):
query = Klass.objects.all(
).annotate(num_students=Count(Case(When(student__archived=False, then=1)))
).filter(num_students__gt=0
).order_by('section', 'name')
query = Klass.active.order_by('section', 'name')
filename = 'archive_RolesDeClasses.zip'
path = os.path.join(tempfile.gettempdir(), filename)