From 61689fc2d836dc187ee1e3e779e99e31ac26293d Mon Sep 17 00:00:00 2001 From: Jailson Dias Date: Wed, 12 Oct 2016 16:44:21 -0300 Subject: [PATCH] criado o model de respostas do aluno e ajustes no template de visualizar enquete pelo aluno #146, #174 --- courses/templates/subject/form_view_student.html | 5 +++-- courses/templates/subject/poll_item_actions.html | 8 +++++++- poll/admin.py | 7 ++++++- poll/migrations/0002_answersstudent.py | 33 +++++++++++++++++++++++++++++++++ poll/migrations/0003_auto_20161012_1638.py | 21 +++++++++++++++++++++ poll/models.py | 14 ++++++++++++++ poll/templates/poll/view.html | 16 +++++++++++++--- poll/tests/poll.py | 4 ++-- poll/views.py | 41 +++-------------------------------------- 9 files changed, 102 insertions(+), 47 deletions(-) create mode 100644 poll/migrations/0002_answersstudent.py create mode 100644 poll/migrations/0003_auto_20161012_1638.py diff --git a/courses/templates/subject/form_view_student.html b/courses/templates/subject/form_view_student.html index 51471e1..07c1907 100644 --- a/courses/templates/subject/form_view_student.html +++ b/courses/templates/subject/form_view_student.html @@ -17,7 +17,8 @@

{{topic.description|linebreaks}}

- {% list_topic_foruns request topic %} + {% list_topic_foruns request topic %} + {% list_topic_poll request topic %}
- \ No newline at end of file + diff --git a/courses/templates/subject/poll_item_actions.html b/courses/templates/subject/poll_item_actions.html index d73f096..7815e6d 100644 --- a/courses/templates/subject/poll_item_actions.html +++ b/courses/templates/subject/poll_item_actions.html @@ -1,12 +1,18 @@ -{% load static i18n %} +{% load static i18n permission_tags%} +{% if request.user|has_role:'professor, system_admin'%} {% for poll in polls %}
  • poll {{ poll.name }}
  • {% endfor %} +{% else %} +{% for poll in polls %} +
  • poll {{ poll.name }}
  • +{% endfor %} +{% endif %} diff --git a/poll/admin.py b/poll/admin.py index 1f18fc3..f4432b5 100644 --- a/poll/admin.py +++ b/poll/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from .models import Poll, Answer +from .models import Poll, Answer, AnswersStudent class PollAdmin(admin.ModelAdmin): list_display = ['name', 'slug','limit_date'] @@ -10,5 +10,10 @@ class AnswerAdmin(admin.ModelAdmin): list_display = ['answer','order'] search_fields = ['answer'] +class AnswersStudentAdmin(admin.ModelAdmin): + list_display = ['student','poll','answered_in'] + search_fields = ['student','poll'] + admin.site.register(Poll, PollAdmin) admin.site.register(Answer, AnswerAdmin) +admin.site.register(AnswersStudent, AnswersStudentAdmin) diff --git a/poll/migrations/0002_answersstudent.py b/poll/migrations/0002_answersstudent.py new file mode 100644 index 0000000..031dd05 --- /dev/null +++ b/poll/migrations/0002_answersstudent.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-10-12 18:26 +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): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('poll', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='AnswersStudent', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.BooleanField(default=False, verbose_name='Answered')), + ('answered_in', models.DateTimeField(auto_now=True, verbose_name='Answered Date')), + ('answer', models.ManyToManyField(related_name='answers_stundet', to='poll.Answer', verbose_name='Answers Students')), + ('poll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundet', to='poll.Poll', verbose_name='Answers')), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundent', to=settings.AUTH_USER_MODEL, verbose_name='Student')), + ], + options={ + 'verbose_name': 'Answer Stundent', + 'verbose_name_plural': 'Answers Student', + }, + ), + ] diff --git a/poll/migrations/0003_auto_20161012_1638.py b/poll/migrations/0003_auto_20161012_1638.py new file mode 100644 index 0000000..03d191d --- /dev/null +++ b/poll/migrations/0003_auto_20161012_1638.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-10-12 19:38 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('poll', '0002_answersstudent'), + ] + + operations = [ + migrations.AlterField( + model_name='answersstudent', + name='poll', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundet', to='poll.Poll', verbose_name='Poll'), + ), + ] diff --git a/poll/models.py b/poll/models.py index b022aef..3d770f7 100644 --- a/poll/models.py +++ b/poll/models.py @@ -27,3 +27,17 @@ class Answer(models.Model): def __str__(self): return str(self.answer) + str("/") + str(self.poll) + +class AnswersStudent(models.Model): + status = models.BooleanField(_("Answered"), default=False) + poll = models.ForeignKey(Poll, verbose_name = _('Poll'), related_name='answers_stundet') + answer = models.ManyToManyField(Answer,verbose_name = _('Answers Students'), related_name='answers_stundet') + student = models.ForeignKey(User, verbose_name = _('Student'), related_name='answers_stundent') + answered_in = models.DateTimeField(_("Answered Date"),auto_now=True) + + class Meta: + verbose_name = _('Answer Stundent') + verbose_name_plural = _('Answers Student') + + def __str__(self): + return str(self.student) + str("/") + str(self.poll) diff --git a/poll/templates/poll/view.html b/poll/templates/poll/view.html index 6dce08c..5d00356 100644 --- a/poll/templates/poll/view.html +++ b/poll/templates/poll/view.html @@ -7,19 +7,29 @@ {% block title_poll %} - + {% endblock title_poll %} {% block content_poll %}
    -

    {% trans "Limit date:" %} {{poll.limit_date|date:'d/m/y'}}

    +

    {% trans "Limit date:" %} {{poll.limit_date|date:'d/m/y'}}

    +
    +
    +

    {% trans "Status:" %} + {% if status %} + {% trans "Poll answered" %} + {% else %} + {% trans "Poll don't yet answered" %} + {% endif %}

    {% endblock content_poll %} {% block button_save %} - +{% if not status %} + +{% endif %} {% endblock button_save %} diff --git a/poll/tests/poll.py b/poll/tests/poll.py index eaaf009..d6f8bf2 100644 --- a/poll/tests/poll.py +++ b/poll/tests/poll.py @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse from rolepermissions.shortcuts import assign_role -from courses.models import Category, Course, Subject, Topic +from courses.models import CourseCategory, Course, Subject, Topic from poll.models import Poll from users.models import User @@ -33,7 +33,7 @@ class PollTestCase(TestCase): ) assign_role(self.user_student, 'student') - self.category = Category( + self.category = CourseCategory( name = 'Categoria Teste', ) self.category.save() diff --git a/poll/views.py b/poll/views.py index 8a0d7b7..633bf82 100644 --- a/poll/views.py +++ b/poll/views.py @@ -12,7 +12,7 @@ from django.db.models import Q # from django.views.generic.edit import FormMixin from .forms import PollForm -from .models import Poll, Answer +from .models import Poll, Answer, AnswersStudent from core.mixins import NotificationMixin from users.models import User from courses.models import Course, Topic @@ -26,48 +26,14 @@ class ViewPoll(LoginRequiredMixin,generic.DetailView): def get_object(self, queryset=None): return get_object_or_404(Poll, slug = self.kwargs.get('slug')) - def form_invalid(self, form,**kwargs): - context = super(ViewPoll, self).form_invalid(form) - answers = {} - for key in self.request.POST: - if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'): - answers[key] = self.request.POST[key] - - keys = sorted(answers) - context.context_data['answers'] = answers - context.context_data['keys'] = keys - return context - - def form_valid(self, form): - poll = self.object - poll = form.save(commit = False) - poll.answers.all().delete() - poll.save() - - - for key in self.request.POST: - if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'): - answer = Answer(answer=self.request.POST[key],order=key,poll=poll) - answer.save() - - return super(ViewPoll, self).form_valid(form) - def get_context_data(self, **kwargs): context = super(ViewPoll, self).get_context_data(**kwargs) poll = self.object + context["topic"] = poll.topic context['course'] = poll.topic.subject.course context['subject'] = poll.topic.subject context['subjects'] = poll.topic.subject.course.subjects.all() - - answers = {} - for answer in poll.answers.all(): - answers[answer.order] = answer.answer - - keys = sorted(answers) - context['answers'] = answers - context['keys'] = keys - - print (context) + context['status'] = AnswersStudent.objects.get(poll=poll, student=self.request.user).status return context @@ -93,7 +59,6 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin,generic.CreateView): context.context_data['keys'] = keys context.context_data['form'] = form context.status_code = 400 - print (context) # return self.render_to_response(context, status = 400) return context -- libgit2 0.21.2