1
1
from django import forms
2
2
3
- from annotations .forms import AddFragmentsForm , LabelField , SegmentSelectMixin
3
+ from annotations .forms import AddFragmentsForm , LabelFormMixin , SegmentSelectMixin
4
4
5
5
from .management .commands .add_pre_fragments import process_file
6
6
from .models import Selection , Word , Tense
7
7
8
8
9
- class SelectionForm (SegmentSelectMixin , forms .ModelForm ):
10
- already_complete = forms .BooleanField (label = 'All targets have already been selected in this fragment' , required = False )
9
+ class SelectionForm (LabelFormMixin , SegmentSelectMixin , forms .ModelForm ):
10
+ already_complete = forms .BooleanField (
11
+ label = 'All targets have already been selected in this fragment' , required = False )
11
12
12
13
class Meta :
13
14
model = Selection
14
15
fields = [
15
- 'is_no_target' , 'already_complete' , 'tense' , 'labels' , 'comments' , 'words' ,
16
+ 'is_no_target' , 'already_complete' ,
17
+ 'tense' , 'labels' ,
18
+ 'comments' , 'words' ,
16
19
'select_segment'
17
20
]
18
21
widgets = {
@@ -37,21 +40,6 @@ def __init__(self, *args, **kwargs):
37
40
if not self .fragment .document .corpus .tense_based :
38
41
del self .fields ['tense' ]
39
42
40
- language = self .fragment .language
41
- # add a label field for each label key
42
- for key in self .corpus .label_keys .all ():
43
- existing_label = self .instance .labels .filter (key = key ).first () if self .instance .id else None
44
- field = LabelField (label_key = key ,
45
- language = language ,
46
- initial = existing_label ,
47
- required = False )
48
- self .fields [key .symbol ()] = field
49
-
50
- # hide the original field for labels.
51
- # we still need this field defined in AnnotationForm.fields, otherwise
52
- # the value set in AnnotationForm.clean() will not be used when submitting the form.
53
- del self .fields ['labels' ]
54
-
55
43
if not selected_words :
56
44
del self .fields ['already_complete' ]
57
45
@@ -62,6 +50,10 @@ def __init__(self, *args, **kwargs):
62
50
def corpus (self ):
63
51
return self .fragment .document .corpus
64
52
53
+ @property
54
+ def language (self ):
55
+ return self .fragment .language
56
+
65
57
def clean (self ):
66
58
"""
67
59
Check for conditional requirements:
@@ -73,15 +65,6 @@ def clean(self):
73
65
if not cleaned_data ['words' ]:
74
66
self .add_error ('is_no_target' , 'Please select the words composing the target phrase.' )
75
67
76
- # construct a value for Annotation.labels based on the individual label fields
77
- cleaned_data ['labels' ] = []
78
- fields = [key .symbol () for key in self .corpus .label_keys .all ()]
79
- for field in fields :
80
- if cleaned_data [field ]:
81
- cleaned_data ['labels' ].append (cleaned_data [field ])
82
- else :
83
- self .add_error (field , 'Please choose a label.' )
84
-
85
68
return cleaned_data
86
69
87
70
0 commit comments