Commit 8227d916f5d85f2a83c031e4e71be5c62d4f801a

Authored by fbormann
1 parent 2846f023

posted data from more than one dynamic form

reports/forms.py
... ... @@ -4,6 +4,21 @@ import datetime
4 4  
5 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 22 class ResourceAndTagForm(forms.Form):
8 23  
9 24 resource = forms.ChoiceField(label=_("Kind Of Resource"), required=True)
... ... @@ -13,7 +28,7 @@ class ResourceAndTagForm(forms.Form):
13 28 super(ResourceAndTagForm, self).__init__(*args, **kwargs)
14 29 if kwargs.get('initial'):
15 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 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 65  
66 66 <div id="resources" class="panel-collapse collapse">
67 67 {{ resource_tag_formset.management_form }}
68   - {{ resource_tag_formset.non_form_errors }}
  68 +
69 69  
70 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 77 <div class="resource-tag-formset">
72 78 {% for field in resource_tag_form %}
73 79 <label>{{field.label}}</label>
74 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">&times;</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 83 {% endfor %}
92 84 </div>
93 85 {% endfor %}
... ...
reports/views.py
... ... @@ -13,7 +13,7 @@ from django.db.models import Q
13 13 from django.contrib.auth.mixins import LoginRequiredMixin
14 14 from datetime import datetime, date
15 15 from subjects.models import Subject
16   -from .forms import CreateInteractionReportForm, ResourceAndTagForm
  16 +from .forms import CreateInteractionReportForm, ResourceAndTagForm, BaseResourceAndTagFormset
17 17 from log.models import Log
18 18 from topics.models import Resource, Topic
19 19  
... ... @@ -45,21 +45,20 @@ class ReportView(LoginRequiredMixin, generic.FormView):
45 45  
46 46 topics = subject.topic_subject.all()
47 47 #get all resources associated with topics
48   - resources = []
49 48 tags = []
50 49 for topic in topics:
51 50 resources_set = topic.resource_topic.all()
52 51 for resource in resources_set:
53 52 for tag in resource.tags.all():
54 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 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 62 context['resource_tag_formset'] = resourceTagFormSet
64 63 return context
65 64  
... ... @@ -94,16 +93,22 @@ class ReportView(LoginRequiredMixin, generic.FormView):
94 93  
95 94 topics = subject.topic_subject.all()
96 95 #get all resources associated with topics
97   - resources = []
98 96 tags = []
99 97 for topic in topics:
100 98 resources_set = topic.resource_topic.all()
101 99 for resource in resources_set:
102 100 for tag in resource.tags.all():
103 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 112 if form.is_valid() and resources_formset.is_valid():
108 113 self.form_data = form.cleaned_data
109 114 self.formset_data = resources_formset.cleaned_data
... ... @@ -125,7 +130,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView):
125 130 context['init_date'] = params_data['init_date']
126 131 context['end_date'] = params_data['end_date']
127 132 context['subject'] = subject
128   -
  133 + print(params_data)
129 134  
130 135 if params_data['from_mural']:
131 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 202 user = student).count()
198 203  
199 204  
  205 + #VAR08 -
  206 +
200 207 #VAR20 - number of access to mural between 6 a.m to 12a.m.
201 208 interactions[' number of access to mural between 6 a.m to 12a.m.'] = Log.objects.filter(action="access", resource="subject",
202 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 212 interactions['number of access to mural between 0 p.m to 6p.m.'] = Log.objects.filter(action="access", resource="subject",
206 213 user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (11, 17)).count()
207 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 216 user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (17, 23)).count()
210 217  
211 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 220 user_id= student.id, context__contains = {'subject_id' : subject.id}, datetime__hour__range = (23, 5)).count()
214 221  
215 222 #VAR24 through 30
... ...