From f2811c4133269d07d8079ed6913cfe973cab7d86 Mon Sep 17 00:00:00 2001 From: Matheus Lins Date: Thu, 17 Nov 2016 00:16:38 -0300 Subject: [PATCH] impoviment the exercise's model #95 --- app/migrations/0001_initial.py | 5 ++--- core/migrations/0001_initial.py | 28 +++++++--------------------- core/migrations/0002_auto_20161117_0009.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ courses/migrations/0001_initial.py | 56 +++++++++----------------------------------------------- courses/migrations/0002_auto_20161117_0009.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ courses/templates/subject/form_view_teacher.html | 8 +------- courses/templates/topic/index.html | 20 +++++++++++++------- courses/templates/topic/topic_card.html | 28 ++++++++++++++++++++++++++++ courses/templates/topic/topic_card_student.html | 29 ----------------------------- courses/views.py | 6 ++++++ exam/migrations/0001_initial.py | 22 ++++------------------ exam/migrations/0002_auto_20161117_0009.py | 30 ++++++++++++++++++++++++++++++ exercise/admin.py | 7 ++++++- exercise/forms.py | 4 ++-- exercise/migrations/0001_initial.py | 20 +++++++++++++++----- exercise/migrations/0002_auto_20161116_2111.py | 27 --------------------------- exercise/migrations/0002_auto_20161117_0009.py | 36 ++++++++++++++++++++++++++++++++++++ exercise/models.py | 23 +++++++++++++++++++---- exercise/templates/exercise/card_list_user.html | 53 ++++++++++++++++++++++------------------------------- exercise/templates/exercise/card_topic_exercises.html | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ exercise/templates/exercise/home.html | 76 ---------------------------------------------------------------------------- exercise/urls.py | 1 - exercise/views.py | 21 --------------------- files/migrations/0001_initial.py | 10 ++-------- files/migrations/0002_topicfile_professor.py | 24 ++++++++++++++++++++++++ forum/migrations/0001_initial.py | 15 ++++----------- forum/migrations/0002_auto_20161117_0009.py | 35 +++++++++++++++++++++++++++++++++++ links/migrations/0001_initial.py | 9 ++++----- links/migrations/0002_auto_20161116_1804.py | 25 ------------------------- poll/migrations/0001_initial.py | 22 +++++----------------- poll/migrations/0002_auto_20161117_0009.py | 30 ++++++++++++++++++++++++++++++ users/migrations/0001_initial.py | 4 ++-- 32 files changed, 493 insertions(+), 368 deletions(-) create mode 100644 core/migrations/0002_auto_20161117_0009.py create mode 100644 courses/migrations/0002_auto_20161117_0009.py create mode 100644 courses/templates/topic/topic_card.html delete mode 100644 courses/templates/topic/topic_card_student.html create mode 100644 exam/migrations/0002_auto_20161117_0009.py delete mode 100644 exercise/migrations/0002_auto_20161116_2111.py create mode 100644 exercise/migrations/0002_auto_20161117_0009.py create mode 100644 exercise/templates/exercise/card_topic_exercises.html delete mode 100644 exercise/templates/exercise/home.html create mode 100644 files/migrations/0002_topicfile_professor.py create mode 100644 forum/migrations/0002_auto_20161117_0009.py delete mode 100644 links/migrations/0002_auto_20161116_1804.py create mode 100644 poll/migrations/0002_auto_20161117_0009.py diff --git a/app/migrations/0001_initial.py b/app/migrations/0001_initial.py index 6a95c2c..be12c7a 100644 --- a/app/migrations/0001_initial.py +++ b/app/migrations/0001_initial.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-16 20:53 - +# Generated by Django 1.10 on 2016-11-17 03:09 from __future__ import unicode_literals from django.db import migrations, models @@ -27,8 +26,8 @@ class Migration(migrations.Migration): ('default_from_email', models.EmailField(max_length=254, verbose_name='Default from email')), ], options={ - 'verbose_name_plural': 'Amadeus SMTP settings', 'verbose_name': 'Amadeus SMTP setting', + 'verbose_name_plural': 'Amadeus SMTP settings', }, ), ] diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index 1b41fe9..a42da7e 100644 --- a/core/migrations/0001_initial.py +++ b/core/migrations/0001_initial.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- - -# Generated by Django 1.10 on 2016-11-16 20:53 - +# Generated by Django 1.10 on 2016-11-17 03:09 from __future__ import unicode_literals import autoslug.fields -from django.conf import settings import django.contrib.postgres.fields.jsonb from django.db import migrations, models import django.db.models.deletion @@ -16,7 +13,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -29,19 +25,18 @@ class Migration(migrations.Migration): ('created_date', models.DateTimeField(auto_now_add=True, verbose_name='Created Date')), ], options={ - 'verbose_name_plural': 'Actions', 'verbose_name': 'Action', + 'verbose_name_plural': 'Actions', }, ), migrations.CreateModel( name='Action_Resource', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('action', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action', verbose_name='Action_Applied')), ], options={ - 'verbose_name_plural': 'Action_Resources', 'verbose_name': 'Action_Resource', + 'verbose_name_plural': 'Action_Resources', }, ), migrations.CreateModel( @@ -51,12 +46,10 @@ class Migration(migrations.Migration): ('component', models.TextField(verbose_name='Component (Module / App)')), ('context', django.contrib.postgres.fields.jsonb.JSONField(blank=True, verbose_name='Context')), ('datetime', models.DateTimeField(auto_now_add=True, verbose_name='Date and Time of action')), - ('action_resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Actor')), ], options={ - 'verbose_name_plural': 'Logs', 'verbose_name': 'Log', + 'verbose_name_plural': 'Logs', }, ), migrations.CreateModel( @@ -67,8 +60,8 @@ class Migration(migrations.Migration): ('icon', models.CharField(max_length=50, unique=True, verbose_name='Icon')), ], options={ - 'verbose_name_plural': 'Amadeus Mime Types', 'verbose_name': 'Amadeus Mime Type', + 'verbose_name_plural': 'Amadeus Mime Types', }, ), migrations.CreateModel( @@ -79,12 +72,10 @@ class Migration(migrations.Migration): ('read', models.BooleanField(default=False, verbose_name='Read')), ('datetime', models.DateTimeField(auto_now_add=True, verbose_name='Date and Time of action')), ('action_resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource')), - ('actor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notification_Performer', to=settings.AUTH_USER_MODEL, verbose_name='Performer')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_Actor', to=settings.AUTH_USER_MODEL, verbose_name='User')), ], options={ - 'verbose_name_plural': 'Notifications', 'verbose_name': 'Notification', + 'verbose_name_plural': 'Notifications', }, ), migrations.CreateModel( @@ -97,13 +88,8 @@ class Migration(migrations.Migration): ('url', models.CharField(default='', max_length=100, verbose_name='URL')), ], options={ - 'verbose_name_plural': 'Resources', 'verbose_name': 'Resource', + 'verbose_name_plural': 'Resources', }, ), - migrations.AddField( - model_name='action_resource', - name='resource', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Resource', verbose_name='Resource'), - ), ] diff --git a/core/migrations/0002_auto_20161117_0009.py b/core/migrations/0002_auto_20161117_0009.py new file mode 100644 index 0000000..4b20bf8 --- /dev/null +++ b/core/migrations/0002_auto_20161117_0009.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-11-17 03:09 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('core', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='notification', + name='actor', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notification_Performer', to=settings.AUTH_USER_MODEL, verbose_name='Performer'), + ), + migrations.AddField( + model_name='notification', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_Actor', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='log', + name='action_resource', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource'), + ), + migrations.AddField( + model_name='log', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Actor'), + ), + migrations.AddField( + model_name='action_resource', + name='action', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action', verbose_name='Action_Applied'), + ), + migrations.AddField( + model_name='action_resource', + name='resource', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Resource', verbose_name='Resource'), + ), + ] diff --git a/courses/migrations/0001_initial.py b/courses/migrations/0001_initial.py index 8743faa..390783a 100644 --- a/courses/migrations/0001_initial.py +++ b/courses/migrations/0001_initial.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-16 20:52 - +# Generated by Django 1.10 on 2016-11-17 03:09 from __future__ import unicode_literals import autoslug.fields -from django.conf import settings from django.db import migrations, models import django.db.models.deletion import s3direct.fields @@ -15,8 +13,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('core', '__first__'), + ('core', '0001_initial'), ] operations = [ @@ -26,7 +23,6 @@ class Migration(migrations.Migration): ('resource_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.Resource')), ('limit_date', models.DateField(verbose_name='Deliver Date')), ('all_students', models.BooleanField(default=False, verbose_name='All Students')), - ('students', models.ManyToManyField(related_name='activities', to=settings.AUTH_USER_MODEL, verbose_name='Students')), ], bases=('core.resource',), ), @@ -36,11 +32,10 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('pdf', s3direct.fields.S3DirectField()), ('name', models.CharField(max_length=100)), - ('diet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='courses.Activity')), ], options={ - 'verbose_name_plural': 'Activitys Files', 'verbose_name': 'Activity File', + 'verbose_name_plural': 'Activitys Files', }, ), migrations.CreateModel( @@ -52,8 +47,8 @@ class Migration(migrations.Migration): ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')), ], options={ - 'verbose_name_plural': 'Categories', 'verbose_name': 'Category', + 'verbose_name_plural': 'Categories', }, ), migrations.CreateModel( @@ -66,9 +61,9 @@ class Migration(migrations.Migration): ('public', models.BooleanField(default=False, verbose_name='Public')), ], options={ + 'verbose_name': 'Course', 'ordering': ('name',), 'verbose_name_plural': 'Courses', - 'verbose_name': 'Course', }, ), migrations.CreateModel( @@ -80,8 +75,8 @@ class Migration(migrations.Migration): ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')), ], options={ - 'verbose_name_plural': 'Categories', 'verbose_name': 'Category', + 'verbose_name_plural': 'Categories', }, ), migrations.CreateModel( @@ -106,7 +101,6 @@ class Migration(migrations.Migration): fields=[ ('resource_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.Resource')), ('all_students', models.BooleanField(default=False, verbose_name='All Students')), - ('students', models.ManyToManyField(related_name='materials', to=settings.AUTH_USER_MODEL, verbose_name='Students')), ], bases=('core.resource',), ), @@ -124,13 +118,11 @@ class Migration(migrations.Migration): ('update_date', models.DateTimeField(auto_now=True, verbose_name='Date of last update')), ('category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='subject_category', to='courses.CategorySubject', verbose_name='Category')), ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subjects', to='courses.Course', verbose_name='Course')), - ('professors', models.ManyToManyField(related_name='professors_subjects', to=settings.AUTH_USER_MODEL, verbose_name='Professors')), - ('students', models.ManyToManyField(blank=True, related_name='subject_student', to=settings.AUTH_USER_MODEL, verbose_name='Students')), ], options={ + 'verbose_name': 'Subject', 'ordering': ('create_date', 'name'), 'verbose_name_plural': 'Subjects', - 'verbose_name': 'Subject', }, ), migrations.CreateModel( @@ -143,8 +135,8 @@ class Migration(migrations.Migration): ('subjects', models.ManyToManyField(to='courses.Subject')), ], options={ - 'verbose_name_plural': 'subject categories', 'verbose_name': 'subject category', + 'verbose_name_plural': 'subject categories', }, ), migrations.CreateModel( @@ -160,39 +152,9 @@ class Migration(migrations.Migration): ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Subject', verbose_name='Subject')), ], options={ + 'verbose_name': 'Topic', 'ordering': ('create_date', 'name'), 'verbose_name_plural': 'Topics', - 'verbose_name': 'Topic', }, ), - migrations.AddField( - model_name='material', - name='topic', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='materials', to='courses.Topic', verbose_name='Topic'), - ), - migrations.AddField( - model_name='linkmaterial', - name='material', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_link', to='courses.Material', verbose_name='Material'), - ), - migrations.AddField( - model_name='filematerial', - name='material', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_file', to='courses.Material', verbose_name='Material'), - ), - migrations.AddField( - model_name='course', - name='category', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_category', to='courses.CourseCategory', verbose_name='Category'), - ), - migrations.AddField( - model_name='course', - name='coordenator', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='course_coordenator', to=settings.AUTH_USER_MODEL, verbose_name='Coordenator'), - ), - migrations.AddField( - model_name='activity', - name='topic', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='courses.Topic', verbose_name='Topic'), - ), ] diff --git a/courses/migrations/0002_auto_20161117_0009.py b/courses/migrations/0002_auto_20161117_0009.py new file mode 100644 index 0000000..e252e6b --- /dev/null +++ b/courses/migrations/0002_auto_20161117_0009.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-11-17 03:09 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('courses', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='subject', + name='professors', + field=models.ManyToManyField(related_name='professors_subjects', to=settings.AUTH_USER_MODEL, verbose_name='Professors'), + ), + migrations.AddField( + model_name='subject', + name='students', + field=models.ManyToManyField(blank=True, related_name='subject_student', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='material', + name='students', + field=models.ManyToManyField(related_name='materials', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='material', + name='topic', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='materials', to='courses.Topic', verbose_name='Topic'), + ), + migrations.AddField( + model_name='linkmaterial', + name='material', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_link', to='courses.Material', verbose_name='Material'), + ), + migrations.AddField( + model_name='filematerial', + name='material', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_file', to='courses.Material', verbose_name='Material'), + ), + migrations.AddField( + model_name='course', + name='category', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_category', to='courses.CourseCategory', verbose_name='Category'), + ), + migrations.AddField( + model_name='course', + name='coordenator', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='course_coordenator', to=settings.AUTH_USER_MODEL, verbose_name='Coordenator'), + ), + migrations.AddField( + model_name='activityfile', + name='diet', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='courses.Activity'), + ), + migrations.AddField( + model_name='activity', + name='students', + field=models.ManyToManyField(related_name='activities', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='activity', + name='topic', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='courses.Topic', verbose_name='Topic'), + ), + ] diff --git a/courses/templates/subject/form_view_teacher.html b/courses/templates/subject/form_view_teacher.html index 72e3000..cc4cb7d 100644 --- a/courses/templates/subject/form_view_teacher.html +++ b/courses/templates/subject/form_view_teacher.html @@ -7,7 +7,7 @@
- +

{{topic}}

@@ -123,12 +123,6 @@ -
- -
- {% include "exercise/create_exercise.html" %} {# opções de cancelar e editar no modo de edição #} diff --git a/courses/templates/topic/index.html b/courses/templates/topic/index.html index ad9970f..7957a33 100644 --- a/courses/templates/topic/index.html +++ b/courses/templates/topic/index.html @@ -65,7 +65,7 @@
- {% include "topic/topic_card_student.html" %} + {% include "topic/topic_card.html" %} {% comment %} @@ -116,13 +116,19 @@ --> {% endcomment %} - - - -
- -
+

{% trans 'Exercises' %}

+ {# mostra a lista de usuários caso seja um professor ou admin #} + {% if user|has_role:'professor' or user|has_role:'system_admin' %} + {% for user in users %} + {% include "exercise/card_list_user.html" %} + {% endfor %} + {# caso seja um estudante, mostra a lista de exercícios proposta a ele #} + {% elif user|has_role:'student'%} + {% for exercise in exercises %} + {% include "exercise/card_topic_exercises.html" %} + {% endfor %} + {% endif %} {% endblock %} diff --git a/courses/templates/topic/topic_card.html b/courses/templates/topic/topic_card.html new file mode 100644 index 0000000..c0f39d2 --- /dev/null +++ b/courses/templates/topic/topic_card.html @@ -0,0 +1,28 @@ +{% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%} + + +
+
+
+

{% trans "Materials" %}

+
+ +
    + {% list_topic_file request topic %} + {% list_topic_link request topic%} + +
+
+
+
+

{% trans "Activities" %}

+
+
    +
    + {# {% list_topic_exam request topic %} #} + {% list_topic_poll request topic %} + {% list_topic_foruns request topic %} +
    +
+
+
\ No newline at end of file diff --git a/courses/templates/topic/topic_card_student.html b/courses/templates/topic/topic_card_student.html deleted file mode 100644 index 432a717..0000000 --- a/courses/templates/topic/topic_card_student.html +++ /dev/null @@ -1,29 +0,0 @@ -{% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%} - - -
-
-
-

{% trans "Materials" %}

-
- -
    - {% list_topic_file request topic %} - {% list_topic_link request topic%} - -
-
-
-
-

{% trans "Activities" %}

-
-
    -
    - {% list_topic_exam request topic %} - {% list_topic_poll request topic %} - {% list_topic_foruns request topic %} -
    -
-
- -
diff --git a/courses/views.py b/courses/views.py index 7ee0cc2..4f5f613 100644 --- a/courses/views.py +++ b/courses/views.py @@ -622,6 +622,12 @@ class TopicsView(LoginRequiredMixin, LogMixin, generic.ListView): activitys = Activity.objects.filter(topic__name = topic.name) students_activit = User.objects.filter(activities__in = Activity.objects.all()) materials = Material.objects.filter(topic = topic) + if has_role(self.request.user, 'professor'): + users = User.objects.all() + context['users'] = users + elif has_role(self.request.user, 'student'): + exercises = Exercise.objects.all().filter(students=self.request.user) + context['exercises'] = exercises context['topic'] = topic context['subject'] = topic.subject diff --git a/exam/migrations/0001_initial.py b/exam/migrations/0001_initial.py index affb3c1..e716e53 100644 --- a/exam/migrations/0001_initial.py +++ b/exam/migrations/0001_initial.py @@ -1,10 +1,7 @@ # -*- coding: utf-8 -*- - -# Generated by Django 1.10 on 2016-11-16 20:53 - +# Generated by Django 1.10 on 2016-11-17 03:09 from __future__ import unicode_literals -from django.conf import settings from django.db import migrations, models import django.db.models.deletion @@ -15,7 +12,6 @@ class Migration(migrations.Migration): dependencies = [ ('courses', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -27,8 +23,8 @@ class Migration(migrations.Migration): ('order', models.PositiveSmallIntegerField(verbose_name='Order')), ], options={ - 'ordering': ('order',), 'verbose_name': 'Answer', + 'ordering': ('order',), 'verbose_name_plural': 'Answers', }, ), @@ -41,8 +37,8 @@ class Migration(migrations.Migration): ('answer', models.ManyToManyField(related_name='student_answer', to='exam.Answer', verbose_name='Answers Students')), ], options={ - 'verbose_name_plural': 'Answers Student', 'verbose_name': 'Answer Stundent', + 'verbose_name_plural': 'Answers Student', }, ), migrations.CreateModel( @@ -53,8 +49,8 @@ class Migration(migrations.Migration): ('exibe', models.BooleanField(default=False, verbose_name='Exibe?')), ], options={ - 'verbose_name_plural': 'Exams', 'verbose_name': 'Exam', + 'verbose_name_plural': 'Exams', }, bases=('courses.activity',), ), @@ -63,14 +59,4 @@ class Migration(migrations.Migration): name='exam', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_exam', to='exam.Exam', verbose_name='Exam'), ), - migrations.AddField( - model_name='answersstudent', - name='student', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student', to=settings.AUTH_USER_MODEL, verbose_name='Student'), - ), - migrations.AddField( - model_name='answer', - name='exam', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='exam.Exam', verbose_name='Answers'), - ), ] diff --git a/exam/migrations/0002_auto_20161117_0009.py b/exam/migrations/0002_auto_20161117_0009.py new file mode 100644 index 0000000..26bfebc --- /dev/null +++ b/exam/migrations/0002_auto_20161117_0009.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-11-17 03:09 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('exam', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='answersstudent', + name='student', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student', to=settings.AUTH_USER_MODEL, verbose_name='Student'), + ), + migrations.AddField( + model_name='answer', + name='exam', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='exam.Exam', verbose_name='Answers'), + ), + ] diff --git a/exercise/admin.py b/exercise/admin.py index b2752a4..92c98dc 100644 --- a/exercise/admin.py +++ b/exercise/admin.py @@ -1,8 +1,13 @@ from django.contrib import admin -from .models import Exercise +from .models import Exercise, File class ExerciseAdmin(admin.ModelAdmin): list_display = ['name'] search_fields = ['name'] +class FileAdmin(admin.ModelAdmin): + list_display = ['name'] + search_fields = ['name'] + admin.site.register(Exercise, ExerciseAdmin) +admin.site.register(File, ExerciseAdmin) diff --git a/exercise/forms.py b/exercise/forms.py index a36ad46..8b48f80 100644 --- a/exercise/forms.py +++ b/exercise/forms.py @@ -9,11 +9,11 @@ class ExerciseForm(forms.ModelForm): class Meta: model = Exercise - fields = ['name', 'file'] + fields = ['name'] class UpdateExerciseForm(forms.ModelForm): class Meta: model = Exercise - fields = ['name', 'file'] + fields = ['name'] diff --git a/exercise/migrations/0001_initial.py b/exercise/migrations/0001_initial.py index 4342604..ca9214b 100644 --- a/exercise/migrations/0001_initial.py +++ b/exercise/migrations/0001_initial.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-16 20:53 - +# Generated by Django 1.10 on 2016-11-17 03:09 from __future__ import unicode_literals +from decimal import Decimal from django.db import migrations, models import django.db.models.deletion @@ -12,7 +12,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('courses', '0001_initial'), ] operations = [ @@ -20,9 +19,20 @@ class Migration(migrations.Migration): name='Exercise', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('file', models.FileField(upload_to='uploads/%Y/%m/%d')), + ('description', models.TextField(blank=True, verbose_name='Descrição')), + ('init_date', models.DateField(verbose_name='Begin of Subject Date')), + ('end_date', models.DateField(verbose_name='End of Subject Date')), + ('grade', models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=20, null=True)), ('name', models.CharField(max_length=100)), - ('topic', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exercises', to='courses.Topic', verbose_name='Topic')), + ], + ), + migrations.CreateModel( + name='File', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('file', models.FileField(upload_to='uploads/%Y/%m/%d')), + ('exercise', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='file', to='exercise.Exercise')), ], ), ] diff --git a/exercise/migrations/0002_auto_20161116_2111.py b/exercise/migrations/0002_auto_20161116_2111.py deleted file mode 100644 index 1bdff12..0000000 --- a/exercise/migrations/0002_auto_20161116_2111.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-17 00:11 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('exercise', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='exercise', - name='professors', - field=models.ManyToManyField(related_name='professors_exercise', to=settings.AUTH_USER_MODEL, verbose_name='Professors'), - ), - migrations.AddField( - model_name='exercise', - name='students', - field=models.ManyToManyField(blank=True, related_name='subject_exercise', to=settings.AUTH_USER_MODEL, verbose_name='Students'), - ), - ] diff --git a/exercise/migrations/0002_auto_20161117_0009.py b/exercise/migrations/0002_auto_20161117_0009.py new file mode 100644 index 0000000..9b05f22 --- /dev/null +++ b/exercise/migrations/0002_auto_20161117_0009.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-11-17 03:09 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('exercise', '0001_initial'), + ('courses', '0002_auto_20161117_0009'), + ] + + operations = [ + migrations.AddField( + model_name='exercise', + name='professors', + field=models.ManyToManyField(blank=True, related_name='professors_exercise', to=settings.AUTH_USER_MODEL, verbose_name='Professors'), + ), + migrations.AddField( + model_name='exercise', + name='students', + field=models.ManyToManyField(blank=True, related_name='subject_exercise', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='exercise', + name='topic', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exercises', to='courses.Topic', verbose_name='Topic'), + ), + ] diff --git a/exercise/models.py b/exercise/models.py index 8db0af3..29e3ded 100644 --- a/exercise/models.py +++ b/exercise/models.py @@ -1,5 +1,6 @@ -from django.db import models from courses.models import Topic +from decimal import Decimal +from django.db import models from django.utils.translation import ugettext_lazy as _ from users.models import User @@ -16,10 +17,24 @@ def file_path(instance, filename): It represents the Exercises inside topic. """ - class Exercise(models.Model): topic = models.ForeignKey(Topic, verbose_name=_('Topic'), related_name='exercises') - professors = models.ManyToManyField(User, verbose_name=_('Professors'), related_name='professors_exercise') + professors = models.ManyToManyField(User, verbose_name=_('Professors'), related_name='professors_exercise', blank=True) students = models.ManyToManyField(User, verbose_name=_('Students'), related_name='subject_exercise', blank = True) - file = models.FileField(upload_to='uploads/%Y/%m/%d') + description = models.TextField(_('Descrição'), blank=True) + init_date = models.DateField(_('Begin of Subject Date')) + end_date = models.DateField(_('End of Subject Date')) + grade = models.DecimalField(max_digits=20, decimal_places=2, default=Decimal('0.00'), null=True) + name = models.CharField(max_length=100) + + def __str__(self): + return self.name + + +class File(models.Model): name = models.CharField(max_length=100) + file = models.FileField(upload_to='uploads/%Y/%m/%d') + exercise = models.ForeignKey(Exercise, related_name='file') + + def __str__(self): + return self.name \ No newline at end of file diff --git a/exercise/templates/exercise/card_list_user.html b/exercise/templates/exercise/card_list_user.html index 1af5c9d..952e9ae 100644 --- a/exercise/templates/exercise/card_list_user.html +++ b/exercise/templates/exercise/card_list_user.html @@ -1,42 +1,33 @@ {% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access list_topic_exercises %} -{% block javascript %} - - - - -{% endblock %} -
-
-
-