forms.py
2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# coding=utf-8
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.html import strip_tags
import datetime
from subjects.models import Tag
from .models import Webconference
class WebconferenceForm(forms.ModelForm):
subject = None
def __init__(self, *args, **kwargs):
super(WebconferenceForm, self).__init__(*args, **kwargs)
self.subject = kwargs['initial'].get('subject', None)
if self.instance.id:
self.subject = self.instance.topic.subject
self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True))
self.fields['students'].queryset = self.subject.students.all()
self.fields['groups'].queryset = self.subject.group_subject.all()
tags = forms.CharField(label = _('Tags'), required = False)
class Meta:
model = Webconference
fields = ['name', 'presentation', 'start', 'end', 'brief_description', 'all_students', 'students', 'groups', 'show_window', 'visible']
labels = {
'name': _('Web Conference Title'),
'presentation': _('Presentation'),
}
widgets = {
'presentation': forms.Textarea,
'brief_description': forms.Textarea,
'students': forms.SelectMultiple,
'groups': forms.SelectMultiple,
}
def clean_name(self):
name = self.cleaned_data.get('name', '')
topics = self.subject.topic_subject.all()
for topic in topics:
if self.instance.id:
same_name = topic.resource_topic.filter(name__unaccent__iexact = name).exclude(id = self.instance.id).count()
else:
same_name = topic.resource_topic.filter(name__unaccent__iexact = name).count()
if same_name > 0:
self._errors['name'] = [_('This subject already has a web conference with this name')]
return ValueError
return name
def clean_start(self):
start = self.cleaned_data['start']
if start.timetuple() < datetime.datetime.now().timetuple():
self._errors['start'] = [_('This date must be today or after')]
return ValueError
return start
def clean_end(self):
end = self.cleaned_data['end']
start = self.cleaned_data['start']
if start is ValueError or end < start:
self._errors['end'] = [_('This date must be equal start date/hour or after')]
return ValueError
return end
def save(self, commit = True):
super(WebconferenceForm, self).save(commit = True)
self.instance.save()
previous_tags = self.instance.tags.all()
tags = self.cleaned_data['tags'].split(",")
#Excluding unwanted tags
for prev in previous_tags:
if not prev.name in tags:
self.instance.tags.remove(prev)
for tag in tags:
tag = tag.strip()
exist = Tag.objects.filter(name = tag).exists()
if exist:
new_tag = Tag.objects.get(name = tag)
else:
new_tag = Tag.objects.create(name = tag)
if not new_tag in self.instance.tags.all():
self.instance.tags.add(new_tag)
return self.instance