1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # -*- coding: utf-8 -*-
- from django import forms
- from corpus.models import EvidenceLabel
- DEFAULT_LABEL = EvidenceLabel._meta.get_field('label').default
- class EvidenceForm(forms.ModelForm):
- class Meta:
- model = EvidenceLabel
- fields = ["label"]
- widgets = {
- 'label': forms.RadioSelect
- }
- def __init__(self, *args, **kwargs):
- instance = kwargs.get('instance', None)
- restore_None = False
- if instance and instance.label is None:
- # When created, EvidenceLabel get None as label.
- # For such cases, on forms, we'll suggest the model.default
- instance.label = DEFAULT_LABEL
- restore_None = True
- super().__init__(*args, **kwargs)
- if restore_None:
- self.instance.label = None
- self.fields['label'].label = ''
- def has_changed(self, *args, **kwargs):
- changed = super().has_changed(*args, **kwargs)
- if not changed and self.instance.label == DEFAULT_LABEL:
- # On init we "hacked" the instance so the form was created showing our
- # desired default value. Because of that, we may not be seeing that change.
- if EvidenceLabel.objects.get(pk=self.instance.pk).label is None:
- changed = True
- return changed
- class EvidenceOnDocumentForm(EvidenceForm):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- f_lbl = self.fields['label']
- f_lbl.widget = forms.HiddenInput()
- # "forms" is the name of some Angular context object on the frontend.
- f_lbl.widget.attrs['ng-value'] = 'forms["%s"]' % self.prefix
- f_lbl.required = False
- class EvidenceToolboxForm(EvidenceForm):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- f_lbl = self.fields['label']
- prev_widget = f_lbl
- f_lbl.widget = forms.RadioSelect(choices=prev_widget.choices)
- f_lbl.widget.attrs['ng-model'] = 'current_tool'
|