Commit 8227d916f5d85f2a83c031e4e71be5c62d4f801a
1 parent
2846f023
Exists in
master
and in
3 other branches
posted data from more than one dynamic form
Showing
3 changed files
with
45 additions
and
31 deletions
Show diff stats
reports/forms.py
@@ -4,6 +4,21 @@ import datetime | @@ -4,6 +4,21 @@ import datetime | ||
4 | 4 | ||
5 | from django.forms.formsets import BaseFormSet | 5 | from django.forms.formsets import BaseFormSet |
6 | 6 | ||
7 | + | ||
8 | +class BaseResourceAndTagFormset(BaseFormSet): | ||
9 | + def clean(self): | ||
10 | + """ | ||
11 | + Adds validation to check that no two links have the same anchor or URL | ||
12 | + and that all links have both an anchor and URL. | ||
13 | + """ | ||
14 | + print("here 2") | ||
15 | + print(self.errors) | ||
16 | + if any(self.errors): | ||
17 | + return | ||
18 | + | ||
19 | + for form in self.forms: | ||
20 | + print(form) | ||
21 | + | ||
7 | class ResourceAndTagForm(forms.Form): | 22 | class ResourceAndTagForm(forms.Form): |
8 | 23 | ||
9 | resource = forms.ChoiceField(label=_("Kind Of Resource"), required=True) | 24 | resource = forms.ChoiceField(label=_("Kind Of Resource"), required=True) |
@@ -13,7 +28,7 @@ class ResourceAndTagForm(forms.Form): | @@ -13,7 +28,7 @@ class ResourceAndTagForm(forms.Form): | ||
13 | super(ResourceAndTagForm, self).__init__(*args, **kwargs) | 28 | super(ResourceAndTagForm, self).__init__(*args, **kwargs) |
14 | if kwargs.get('initial'): | 29 | if kwargs.get('initial'): |
15 | initial = kwargs['initial'] | 30 | initial = kwargs['initial'] |
16 | - self.fields['resource'].choices = [(resource.id, resource.name) for resource in initial['resource']] | 31 | + self.fields['resource'].choices = [(classes.__name__, classes.__name__) for classes in initial['class_name']] |
17 | self.fields['tag'].choices = [(tag.id, tag.name) for tag in initial['tag']] | 32 | self.fields['tag'].choices = [(tag.id, tag.name) for tag in initial['tag']] |
18 | 33 | ||
19 | 34 |
reports/templates/reports/_form.html
@@ -65,29 +65,21 @@ | @@ -65,29 +65,21 @@ | ||
65 | 65 | ||
66 | <div id="resources" class="panel-collapse collapse"> | 66 | <div id="resources" class="panel-collapse collapse"> |
67 | {{ resource_tag_formset.management_form }} | 67 | {{ resource_tag_formset.management_form }} |
68 | - {{ resource_tag_formset.non_form_errors }} | 68 | + |
69 | 69 | ||
70 | {% for resource_tag_form in resource_tag_formset %} | 70 | {% for resource_tag_form in resource_tag_formset %} |
71 | + | ||
72 | + {% if resource_tag_form.anchor.errors %} | ||
73 | + {% for error in resource_tag_form.anchor.errors %} | ||
74 | + {{ error|escape }} | ||
75 | + {% endfor %} | ||
76 | + {% endif %} | ||
71 | <div class="resource-tag-formset"> | 77 | <div class="resource-tag-formset"> |
72 | {% for field in resource_tag_form %} | 78 | {% for field in resource_tag_form %} |
73 | <label>{{field.label}}</label> | 79 | <label>{{field.label}}</label> |
74 | {% render_field field class="form-control" %} | 80 | {% render_field field class="form-control" %} |
75 | 81 | ||
76 | - {% if field.errors %} | ||
77 | - <div class="row"> | ||
78 | - </br> | ||
79 | - <div class="alert alert-danger alert-dismissible" role="alert"> | ||
80 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
81 | - <span aria-hidden="true">×</span> | ||
82 | - </button> | ||
83 | - <ul> | ||
84 | - {% for error in field.errors %} | ||
85 | - <li>{{ error }}</li> | ||
86 | - {% endfor %} | ||
87 | - </ul> | ||
88 | - </div> | ||
89 | - </div> | ||
90 | - {% endif %} | 82 | + |
91 | {% endfor %} | 83 | {% endfor %} |
92 | </div> | 84 | </div> |
93 | {% endfor %} | 85 | {% endfor %} |
reports/views.py
@@ -13,7 +13,7 @@ from django.db.models import Q | @@ -13,7 +13,7 @@ from django.db.models import Q | ||
13 | from django.contrib.auth.mixins import LoginRequiredMixin | 13 | from django.contrib.auth.mixins import LoginRequiredMixin |
14 | from datetime import datetime, date | 14 | from datetime import datetime, date |
15 | from subjects.models import Subject | 15 | from subjects.models import Subject |
16 | -from .forms import CreateInteractionReportForm, ResourceAndTagForm | 16 | +from .forms import CreateInteractionReportForm, ResourceAndTagForm, BaseResourceAndTagFormset |
17 | from log.models import Log | 17 | from log.models import Log |
18 | from topics.models import Resource, Topic | 18 | from topics.models import Resource, Topic |
19 | 19 | ||
@@ -45,21 +45,20 @@ class ReportView(LoginRequiredMixin, generic.FormView): | @@ -45,21 +45,20 @@ class ReportView(LoginRequiredMixin, generic.FormView): | ||
45 | 45 | ||
46 | topics = subject.topic_subject.all() | 46 | topics = subject.topic_subject.all() |
47 | #get all resources associated with topics | 47 | #get all resources associated with topics |
48 | - resources = [] | ||
49 | tags = [] | 48 | tags = [] |
50 | for topic in topics: | 49 | for topic in topics: |
51 | resources_set = topic.resource_topic.all() | 50 | resources_set = topic.resource_topic.all() |
52 | for resource in resources_set: | 51 | for resource in resources_set: |
53 | for tag in resource.tags.all(): | 52 | for tag in resource.tags.all(): |
54 | tags.append(tag) | 53 | tags.append(tag) |
55 | - resources.append(resource) | ||
56 | - context['resources'] = resources | ||
57 | - context['tags'] = tags | ||
58 | 54 | ||
59 | 55 | ||
56 | + classes = Resource.__subclasses__() | ||
57 | + | ||
58 | + | ||
60 | #set formset | 59 | #set formset |
61 | - resourceTagFormSet = formset_factory(ResourceAndTagForm) | ||
62 | - resourceTagFormSet = resourceTagFormSet() | 60 | + resourceTagFormSet = formset_factory(ResourceAndTagForm, formset=BaseResourceAndTagFormset) |
61 | + resourceTagFormSet = resourceTagFormSet(initial=[{'class_name': classes, 'tag':tags}]) | ||
63 | context['resource_tag_formset'] = resourceTagFormSet | 62 | context['resource_tag_formset'] = resourceTagFormSet |
64 | return context | 63 | return context |
65 | 64 | ||
@@ -94,16 +93,22 @@ class ReportView(LoginRequiredMixin, generic.FormView): | @@ -94,16 +93,22 @@ class ReportView(LoginRequiredMixin, generic.FormView): | ||
94 | 93 | ||
95 | topics = subject.topic_subject.all() | 94 | topics = subject.topic_subject.all() |
96 | #get all resources associated with topics | 95 | #get all resources associated with topics |
97 | - resources = [] | ||
98 | tags = [] | 96 | tags = [] |
99 | for topic in topics: | 97 | for topic in topics: |
100 | resources_set = topic.resource_topic.all() | 98 | resources_set = topic.resource_topic.all() |
101 | for resource in resources_set: | 99 | for resource in resources_set: |
102 | for tag in resource.tags.all(): | 100 | for tag in resource.tags.all(): |
103 | tags.append(tag) | 101 | tags.append(tag) |
104 | - resources.append(resource) | ||
105 | - resourceTagFormSet = formset_factory(ResourceAndTagForm) | ||
106 | - resources_formset = resourceTagFormSet(self.request.POST, initial=[{'resource':resources, 'tag':tags}]) | 102 | + |
103 | + classes = Resource.__subclasses__() | ||
104 | + amount_of_forms = self.request.POST['form-TOTAL_FORMS'] | ||
105 | + initial_datum = {'class_name': classes , 'tag': tags} | ||
106 | + initial_data = [] | ||
107 | + for i in range(int(amount_of_forms)): | ||
108 | + initial_data.append(initial_datum) | ||
109 | + | ||
110 | + resourceTagFormSet = formset_factory(ResourceAndTagForm, formset=BaseResourceAndTagFormset) | ||
111 | + resources_formset = resourceTagFormSet(self.request.POST, initial = initial_data) | ||
107 | if form.is_valid() and resources_formset.is_valid(): | 112 | if form.is_valid() and resources_formset.is_valid(): |
108 | self.form_data = form.cleaned_data | 113 | self.form_data = form.cleaned_data |
109 | self.formset_data = resources_formset.cleaned_data | 114 | self.formset_data = resources_formset.cleaned_data |
@@ -125,7 +130,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -125,7 +130,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
125 | context['init_date'] = params_data['init_date'] | 130 | context['init_date'] = params_data['init_date'] |
126 | context['end_date'] = params_data['end_date'] | 131 | context['end_date'] = params_data['end_date'] |
127 | context['subject'] = subject | 132 | context['subject'] = subject |
128 | - | 133 | + print(params_data) |
129 | 134 | ||
130 | if params_data['from_mural']: | 135 | if params_data['from_mural']: |
131 | context['data'], context['header'] = self.get_mural_data(subject, params_data['init_date'], params_data['end_date']) | 136 | context['data'], context['header'] = self.get_mural_data(subject, params_data['init_date'], params_data['end_date']) |
@@ -197,6 +202,8 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -197,6 +202,8 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
197 | user = student).count() | 202 | user = student).count() |
198 | 203 | ||
199 | 204 | ||
205 | + #VAR08 - | ||
206 | + | ||
200 | #VAR20 - number of access to mural between 6 a.m to 12a.m. | 207 | #VAR20 - number of access to mural between 6 a.m to 12a.m. |
201 | interactions[' number of access to mural between 6 a.m to 12a.m.'] = Log.objects.filter(action="access", resource="subject", | 208 | interactions[' number of access to mural between 6 a.m to 12a.m.'] = Log.objects.filter(action="access", resource="subject", |
202 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (5, 11)).count() | 209 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (5, 11)).count() |
@@ -205,11 +212,11 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -205,11 +212,11 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
205 | interactions['number of access to mural between 0 p.m to 6p.m.'] = Log.objects.filter(action="access", resource="subject", | 212 | interactions['number of access to mural between 0 p.m to 6p.m.'] = Log.objects.filter(action="access", resource="subject", |
206 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (11, 17)).count() | 213 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (11, 17)).count() |
207 | #VAR22 | 214 | #VAR22 |
208 | - interactions[' number of access to mural between 6 p.m to 12p.m.'] = Log.objects.filter(action="access", resource="subject", | 215 | + interactions['number of access to mural between 6 p.m to 12p.m.'] = Log.objects.filter(action="access", resource="subject", |
209 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (17, 23)).count() | 216 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (17, 23)).count() |
210 | 217 | ||
211 | #VAR23 | 218 | #VAR23 |
212 | - interactions[' number of access to mural between 0 a.m to 6a.m.'] = Log.objects.filter(action="access", resource="subject", | 219 | + interactions['number of access to mural between 0 a.m to 6a.m.'] = Log.objects.filter(action="access", resource="subject", |
213 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (23, 5)).count() | 220 | user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (23, 5)).count() |
214 | 221 | ||
215 | #VAR24 through 30 | 222 | #VAR24 through 30 |