Преглед изворни кода

Polishing the site (ordering)

Denis Merigoux пре 10 година
родитељ
комит
4bd9bf23d8

+ 12 - 3
census/admin.py

@@ -1,10 +1,19 @@
1 1
 from django.contrib import admin
2 2
 from census.models import *
3 3
 
4
+class CountAdmin(admin.ModelAdmin):
5
+	ordering = ('-date', )
6
+
7
+class LessonAdmin(admin.ModelAdmin):
8
+	ordering = ('-date', )
9
+
10
+class CourseAdmin(admin.ModelAdmin):
11
+	ordering = ('-promotion', 'name')
12
+
4 13
 # Register your models here.
5 14
 admin.site.register(Promotion)
6 15
 admin.site.register(Amphi)
7
-admin.site.register(Course)
16
+admin.site.register(Course,CourseAdmin)
8 17
 admin.site.register(Professor)
9
-admin.site.register(Lesson)
10
-admin.site.register(Count)
18
+admin.site.register(Lesson,LessonAdmin)
19
+admin.site.register(Count,CountAdmin)

+ 12 - 8
census/migrations/0001_initial.py

@@ -13,7 +13,7 @@ class Migration(migrations.Migration):
13 13
         migrations.CreateModel(
14 14
             name='Amphi',
15 15
             fields=[
16
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
16
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
17 17
                 ('name', models.CharField(verbose_name='Nom', max_length=60)),
18 18
                 ('capacity', models.IntegerField(verbose_name='Capacité')),
19 19
             ],
@@ -25,8 +25,11 @@ class Migration(migrations.Migration):
25 25
         migrations.CreateModel(
26 26
             name='Count',
27 27
             fields=[
28
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
28
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
29 29
                 ('census', models.IntegerField(verbose_name="Nombre d'éléves présents")),
30
+                ('date', models.DateTimeField(verbose_name='Soumis le', auto_now=True)),
31
+                ('comment', models.TextField(verbose_name='Commentaires', null=True, blank=True)),
32
+                ('signature', models.CharField(verbose_name='signature', max_length=120)),
30 33
             ],
31 34
             options={
32 35
                 'verbose_name': 'Comptage',
@@ -36,8 +39,8 @@ class Migration(migrations.Migration):
36 39
         migrations.CreateModel(
37 40
             name='Course',
38 41
             fields=[
39
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
40
-                ('name', models.CharField(verbose_name='Nom', max_length=6)),
42
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
43
+                ('name', models.CharField(verbose_name='Nom', max_length=60)),
41 44
                 ('enrolled', models.IntegerField(verbose_name="Nombre d'inscrits")),
42 45
             ],
43 46
             options={
@@ -49,9 +52,10 @@ class Migration(migrations.Migration):
49 52
         migrations.CreateModel(
50 53
             name='Lesson',
51 54
             fields=[
52
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
55
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
53 56
                 ('date', models.DateField(verbose_name='Date')),
54 57
                 ('number', models.IntegerField(verbose_name='Numéro de la séance')),
58
+                ('title', models.CharField(verbose_name='Titre', max_length=140, null=True, blank=True)),
55 59
                 ('amphi', models.ForeignKey(verbose_name='Amphithéâtre', to='census.Amphi')),
56 60
                 ('course', models.ForeignKey(to='census.Course')),
57 61
             ],
@@ -63,7 +67,7 @@ class Migration(migrations.Migration):
63 67
         migrations.CreateModel(
64 68
             name='Professor',
65 69
             fields=[
66
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
70
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
67 71
                 ('name', models.CharField(verbose_name='Nom', max_length=100)),
68 72
             ],
69 73
             options={
@@ -74,7 +78,7 @@ class Migration(migrations.Migration):
74 78
         migrations.CreateModel(
75 79
             name='Promotion',
76 80
             fields=[
77
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
81
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
78 82
                 ('number', models.IntegerField(verbose_name='Numéro')),
79 83
             ],
80 84
             options={
@@ -85,7 +89,7 @@ class Migration(migrations.Migration):
85 89
         migrations.AddField(
86 90
             model_name='lesson',
87 91
             name='professor',
88
-            field=models.ForeignKey(verbose_name='Professeur', to='census.Professor'),
92
+            field=models.ForeignKey(null=True, verbose_name='Professeur', to='census.Professor', blank=True),
89 93
             preserve_default=True,
90 94
         ),
91 95
         migrations.AddField(

+ 8 - 8
census/models.py

@@ -47,14 +47,14 @@ class Lesson(models.Model):
47 47
 	title=models.CharField("Titre",max_length=140,blank=True,null=True)
48 48
 
49 49
 	def __str__(self):
50
-		if ((self.number is not None) & (self.title is not None)):
51
-			return "%s n°%s : %s (%s, %s)" % (self.course.name,self.number,self.title,self.course.promotion,self.date)
52
-		elif (self.number is not None):
53
-			return "%s n°%s (%s, %s)" % (self.course.name,self.number,self.course.promotion,self.date)
54
-		elif (self.title is not None):
55
-			return "%s : %s (%s, %s)" % (self.course.name,self.title,self.course.promotion,self.date)
50
+		if ((self.number != '' ) & (self.title != '')):
51
+			return "%s %s n°%s : %s (%s)" % (self.course.promotion,self.course.name,self.number,self.title,self.date)
52
+		elif (self.number != ''):
53
+			return "%s %s n°%s (%s)" % (self.course.promotion,self.course.name,self.number,self.date)
54
+		elif (self.title != ''):
55
+			return "%s %s : %s (%s)" % (self.course.promotion,self.course.name,self.title,self.date)
56 56
 		else:
57
-			return "%s (%s,%s)" % (self.course.name,self.course.promotion,self.date)
57
+			return "%s %s (%s)" % (self.course.promotion,self.course.name,self.date)
58 58
 
59 59
 	class Meta:
60 60
          verbose_name = "Séance"
@@ -63,7 +63,7 @@ class Count(models.Model):
63 63
 	lesson=models.ForeignKey(Lesson,verbose_name="Séance")
64 64
 	census=models.IntegerField("Nombre d'éléves présents")
65 65
 	date=models.DateTimeField("Soumis le",auto_now="True")
66
-	comment=models.TextField("Commentaires")
66
+	comment=models.TextField("Commentaires",blank=True,null=True)
67 67
 	signature=models.CharField("signature",max_length=120)
68 68
 
69 69
 

+ 5 - 1
census/templates/coursTemplate.html

@@ -34,7 +34,11 @@
34 34
 		<div class="col-md-4">
35 35
 			<div class="panel panel-default">
36 36
 				<div class="panel-heading">
37
-					<h2 class="panel-title">Séance n°{{lesson.number}} <i>{{lesson.title}}</i> – {{lesson.date|date:"d/m/y"}}, {{lesson.amphi}}</h2>
37
+					<h2 class="panel-title">Séance n°{{lesson.number}} <i>{{lesson.title}}</i> – {{lesson.date|date:"d/m/y"}}, en {{lesson.amphi}}
38
+					{% if lesson.professor %}
39
+					par {{lesson.professor.name}}
40
+					{% endif %}
41
+					</h2>
38 42
 				</div>
39 43
 				<div class="panel-body">
40 44
 					{% if lesson.counts %}

+ 4 - 5
census/templates/homeTemplate.html

@@ -11,7 +11,7 @@
11 11
 				</div>
12 12
 				<div class="panel-body">
13 13
 					<p>Bienvenue sur le site du <b>Laboratoire pour l'Acquisition Périphérique d'Informations !</b></p>
14
-					<p>Tu t'ennuies en amphi ? Tu remarque que les rangs sont de plus en plus clairsemés et tu 
14
+					<p>Tu t'ennuies en amphi ? Tu remarques que les rangs sont de plus en plus clairsemés et tu 
15 15
 					aimerais savoir plus précisément <em>combien</em> de tes camarades de promotions choissisent
16 16
 					la douceur de leur oreiller plutôt que la rudesse des bancs d'Arago ?</p>
17 17
 					<p>Une seule solution : compter ! Suis <a href="{% url 'census.views.comptage' %}">les conseils du LAPI</a> pour un comptage réussi et inscris tes résultats sur le site pour une vision globale du taux d'invisibilité en amphi de ta promotion.</p>
@@ -23,12 +23,11 @@
23 23
 				</div>
24 24
 				<div class="panel-body">
25 25
 					{% if lastcount.lesson.course.name == "Amphis 0" %}
26
-						<p>Comptage de l'amphi 0 de {{lastcount.lesson.title|lower}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
27
-					{% elif astcount.lesson.course.name == "Conférences scientifiques" %}
28
-						<p>Comptage de la conférence scientifique de {{lastcount.lesson.title|lower}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
26
+						<p>Comptage de l'amphi 0 de {{lastcount.lesson.title}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
27
+					{% elif lastcount.lesson.course.name == "Conférences scientifiques" %}
28
+						<p>Comptage de la conférence scientifique de {{lastcount.lesson.title}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
29 29
 					{% else %}
30 30
 						<p>Comptage de l'amphi n°{{lastcount.lesson.number}} de {{lastcount.lesson.course.name}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
31
-					}
32 31
 					{% endif %}
33 32
 					<div class="progress">
34 33
  						<div class="progress-bar progress-bar-{{lastcount.progressbarclass}}" role="progressbar"

+ 12 - 6
census/views.py

@@ -1,6 +1,8 @@
1 1
 from django.shortcuts import render
2 2
 from census.models import Course,Count,Lesson
3 3
 from django import forms
4
+from django.db.models.aggregates import Max
5
+from datetime import *
4 6
 from django.http import HttpResponseRedirect
5 7
 
6 8
 #Auxiliariy functions
@@ -32,7 +34,7 @@ def getCourseStatistics(course):
32 34
 			course.nonnulllessonscount += 1
33 35
 		else:
34 36
 			lesson.counts = None
35
-	if (course.lessons.count() != 0):
37
+	if (course.nonnulllessonscount != 0):
36 38
 		course.totalratio = round(course.totalsum / course.nonnulllessonscount)
37 39
 		course.progressbarclass = getProgressBarClass(course.totalratio)
38 40
 	else:
@@ -54,13 +56,17 @@ class addCountForm(forms.ModelForm):
54 56
 
55 57
 def home(request):
56 58
 	#Retrieving the course list and the statistics
57
-	courses = Course.objects.filter(promotion__number=2014)
59
+	courses = Course.objects.all().annotate(latest_lesson_date=Max('lesson__date')).order_by('-latest_lesson_date')
60
+	#courses = Course.objects.all().order_by('-promotion')
58 61
 	for course in courses:
59 62
 		course = getCourseStatistics(course)
60 63
 	#Retrieving last count
61
-	lastcount = Count.objects.latest('date')
62
-	lastcount.ratio = round(lastcount.census/lastcount.lesson.course.enrolled*100)
63
-	lastcount.progressbarclass= getProgressBarClass(lastcount.ratio)
64
+	if (Count.objects.all().count() != 0):
65
+		lastcount = Count.objects.latest('date')
66
+		lastcount.ratio = round(lastcount.census/lastcount.lesson.course.enrolled*100)
67
+		lastcount.progressbarclass= getProgressBarClass(lastcount.ratio)
68
+	else:
69
+		lastcount = None
64 70
 
65 71
 	return render(request,'homeTemplate.html', {'courses' : courses, 'lastcount' : lastcount,})
66 72
 
@@ -77,7 +83,7 @@ def addcount(request):
77 83
     if request.method == 'POST':
78 84
         # create a form instance and populate it with data from the request:
79 85
         form = addCountForm(request.POST)
80
-        form.fields["lesson"].queryset = Lesson.objects.all().order_by('-date')
86
+        form.fields["lesson"].queryset = Lesson.objects.filter(date__lt=datetime.now()+timedelta(7)).order_by('-date')
81 87
         # check whether it's valid:
82 88
         if form.is_valid():
83 89
             count = form.save()


Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
lapi.json