From 20c7637321ae11f36c701821437d67ed70c3b143 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Fri, 23 Nov 2012 11:31:06 +0100 Subject: [PATCH] Add class level (and filter on it) --- docs/SchemaRelationnel.odg | Bin 19765 -> 20384 bytes stages/admin.py | 9 +++++---- stages/fixtures/test_fixture.json | 27 ++++++++++++++++++++++++++- stages/models.py | 12 ++++++++++++ stages/views.py | 7 ++++--- 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/docs/SchemaRelationnel.odg b/docs/SchemaRelationnel.odg index 1cc6cf765f5298881ffb8fb5987eb1e391844914..b2e2b2a32dd5b946e6d9247f889c9eaa8ff70760 100644 GIT binary patch delta 15401 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 diff --git a/stages/admin.py b/stages/admin.py index 28a6a4c..cc886b9 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -2,8 +2,8 @@ from django import forms from django.contrib import admin from django.db import models -from stages.models import (Student, Section, Klass, Referent, Corporation, CorpContact, - Domain, Period, Availability, Training) +from stages.models import (Student, Section, Level, Klass, Referent, Corporation, + CorpContact, Domain, Period, Availability, Training) class StudentAdmin(admin.ModelAdmin): @@ -77,8 +77,8 @@ class AvailabilityInline(admin.TabularInline): class PeriodAdmin(admin.ModelAdmin): - list_display = ('title', 'dates', 'section') - list_filter = ('section',) + list_display = ('title', 'dates', 'section', 'level') + list_filter = ('section', 'level') inlines = [AvailabilityInline] @@ -94,6 +94,7 @@ class AvailabilityAdmin(admin.ModelAdmin): admin.site.register(Section) +admin.site.register(Level) admin.site.register(Klass) admin.site.register(Student, StudentAdmin) admin.site.register(Referent, ReferentAdmin) diff --git a/stages/fixtures/test_fixture.json b/stages/fixtures/test_fixture.json index c33db51..9a24907 100644 --- a/stages/fixtures/test_fixture.json +++ b/stages/fixtures/test_fixture.json @@ -20,12 +20,36 @@ "name": "EDE" } }, + { + "pk": 1, + "model": "stages.level", + "fields": { + "name": "1" + } + }, + { + "pk": 2, + "model": "stages.level", + "fields": { + "name": "2" + } + }, { "pk": 1, "model": "stages.klass", "fields": { "name": "1ASE3", - "section": 1 + "section": 1, + "level": 1 + } + }, + { + "pk": 2, + "model": "stages.klass", + "fields": { + "name": "2ASE3", + "section": 1, + "level": 2 } }, { @@ -138,6 +162,7 @@ "fields": { "title": "Stage de pré-sensibilisation", "section": 1, + "level": 1, "start_date": "2012-11-26", "end_date": "2012-12-07" } diff --git a/stages/models.py b/stages/models.py index b5abb4f..4bd5a90 100644 --- a/stages/models.py +++ b/stages/models.py @@ -23,9 +23,20 @@ class Section(models.Model): return self.name +class Level(models.Model): + name = models.CharField(max_length=10, verbose_name='Nom') + + class Meta: + verbose_name = "Niveau" + + def __unicode__(self): + return self.name + + class Klass(models.Model): name = models.CharField(max_length=10, verbose_name='Nom') section = models.ForeignKey(Section, verbose_name='Filière') + level = models.ForeignKey(Level, verbose_name='Niveau') class Meta: verbose_name = "Classe" @@ -131,6 +142,7 @@ class Period(models.Model): """ Périodes de stages """ title = models.CharField(max_length=150, verbose_name='Titre') section = models.ForeignKey(Section, verbose_name='Filière') + level = models.ForeignKey(Level, verbose_name='Niveau') start_date = models.DateField(verbose_name='Date de début') end_date = models.DateField(verbose_name='Date de fin') diff --git a/stages/views.py b/stages/views.py index d96e3b7..0973621 100644 --- a/stages/views.py +++ b/stages/views.py @@ -57,11 +57,12 @@ def section_classes(request, pk): def period_students(request, pk): - """ Return all students from period's section, with corresponding Training - if existing (JSON) + """ + Return all students from period's section and level, + with corresponding Training if existing (JSON) """ period = get_object_or_404(Period, pk=pk) - students = Student.objects.filter(klass__section=period.section).order_by('last_name') + students = Student.objects.filter(klass__section=period.section, klass__level=period.level).order_by('last_name') trainings = dict((t.student_id, t.id) for t in Training.objects.filter(availability__period=period)) data = [{ 'name': unicode(s),