Skip to content

Commit 1194f5d

Browse files
committed
Aligning the Annotation/SelectionForm
1 parent 6779409 commit 1194f5d

File tree

2 files changed

+18
-35
lines changed

2 files changed

+18
-35
lines changed

annotations/forms.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,26 +65,26 @@ def __init__(self, *args, **kwargs):
6565
self.fields[key.symbol()] = field
6666

6767
# hide the original field for labels.
68-
# we still need this field defined in AnnotationForm.fields, otherwise
69-
# the value set in AnnotationForm.clean() will not be used when submitting the form.
68+
# we still need this field defined in fields of the Form, otherwise
69+
# the value set in clean() will not be used when submitting the form.
7070
del self.fields['labels']
7171

7272
def clean(self):
7373
cleaned_data = super(LabelFormMixin, self).clean()
7474

75-
# construct a value for Annotation.labels based on the individual label fields
75+
# construct a value for Annotation/Fragment/PreProcessFragment.labels based on the individual label fields
7676
fields = [key.symbol() for key in self.corpus.label_keys.all()]
7777
cleaned_data['labels'] = [cleaned_data[field] for field in fields if cleaned_data[field]]
7878

7979
return cleaned_data
8080

8181
@property
82-
def corpus(self):
83-
return NotImplementedError
82+
def corpus(self) -> Corpus:
83+
raise NotImplementedError
8484

8585
@property
86-
def language(self):
87-
return NotImplementedError
86+
def language(self) -> Language:
87+
raise NotImplementedError
8888

8989

9090
class SegmentSelectMixin(forms.Form):

selections/forms.py

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
from django import forms
22

3-
from annotations.forms import AddFragmentsForm, LabelField, SegmentSelectMixin
3+
from annotations.forms import AddFragmentsForm, LabelFormMixin, SegmentSelectMixin
44

55
from .management.commands.add_pre_fragments import process_file
66
from .models import Selection, Word, Tense
77

88

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)
1112

1213
class Meta:
1314
model = Selection
1415
fields = [
15-
'is_no_target', 'already_complete', 'tense', 'labels', 'comments', 'words',
16+
'is_no_target', 'already_complete',
17+
'tense', 'labels',
18+
'comments', 'words',
1619
'select_segment'
1720
]
1821
widgets = {
@@ -37,21 +40,6 @@ def __init__(self, *args, **kwargs):
3740
if not self.fragment.document.corpus.tense_based:
3841
del self.fields['tense']
3942

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-
5543
if not selected_words:
5644
del self.fields['already_complete']
5745

@@ -62,6 +50,10 @@ def __init__(self, *args, **kwargs):
6250
def corpus(self):
6351
return self.fragment.document.corpus
6452

53+
@property
54+
def language(self):
55+
return self.fragment.language
56+
6557
def clean(self):
6658
"""
6759
Check for conditional requirements:
@@ -73,15 +65,6 @@ def clean(self):
7365
if not cleaned_data['words']:
7466
self.add_error('is_no_target', 'Please select the words composing the target phrase.')
7567

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-
8568
return cleaned_data
8669

8770

0 commit comments

Comments
 (0)