forms.py
115 lines
| 4.5 KiB
| text/x-python
|
PythonLexer
|
r157 | import os | ||
|
r6 | from django import forms | ||
|
r123 | from apps.main.models import Device, Experiment | ||
|
r135 | from .models import JARSConfiguration, JARSfilter | ||
|
r128 | from .widgets import SpectralWidget | ||
|
r269 | from apps.main.forms import add_empty_choice | ||
def create_choices_from_model(model, filter_id=None): | ||||
#instance = globals()[model] | ||||
choices = model.objects.all().values_list('pk', 'name') | ||||
choices = add_empty_choice(choices) | ||||
return choices | ||||
|
r6 | |||
class JARSConfigurationForm(forms.ModelForm): | ||||
def __init__(self, *args, **kwargs): | ||||
super(JARSConfigurationForm, self).__init__(*args, **kwargs) | ||||
instance = getattr(self, 'instance', None) | ||||
|
r263 | |||
|
r6 | if instance and instance.pk: | ||
|
r26 | devices = Device.objects.filter(device_type__name='jars') | ||
|
r263 | |||
|
r123 | if instance.experiment: | ||
experiments = Experiment.objects.filter(pk=instance.experiment.id) | ||||
self.fields['experiment'].widget.choices = [(experiment.id, experiment) for experiment in experiments] | ||||
|
r263 | |||
|
r123 | self.fields['device'].widget.choices = [(device.id, device) for device in devices] | ||
|
r131 | #self.fields['spectral'].widget = SpectralWidget() | ||
|
r139 | self.fields['spectral_number'].widget.attrs['readonly'] = True | ||
|
r131 | self.fields['spectral'].widget = SpectralWidget() | ||
|
r263 | |||
|
r123 | #-------------JARS Configuration needs an Experiment----------------- | ||
def clean(self): | ||||
cleaned_data = super(JARSConfigurationForm, self).clean() | ||||
experiment = cleaned_data.get('experiment') | ||||
|
r276 | if not experiment: | ||
|
r123 | msg = "Error: Jars Configuration needs an Experiment" | ||
self.add_error('experiment', msg) | ||||
|
r263 | |||
|
r123 | class Meta: | ||
model = JARSConfiguration | ||||
|
r136 | exclude = ('type', 'parameters', 'status', 'filter_parms') | ||
|
r263 | |||
|
r135 | class JARSfilterForm(forms.ModelForm): | ||
def __init__(self, *args, **kwargs): | ||||
super(JARSfilterForm, self).__init__(*args, **kwargs) | ||||
instance = getattr(self, 'instance', None) | ||||
|
r263 | |||
|
r139 | self.fields['fch_decimal'].widget.attrs['readonly'] = True | ||
|
r293 | |||
|
r263 | if 'initial' in kwargs: | ||
|
r269 | if 'filter_id' not in kwargs['initial']: | ||
self.fields.pop('name') | ||||
else: | ||||
self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter)) | ||||
filter_id = kwargs['initial']['filter_id'] | ||||
|
r263 | |||
|
r269 | if filter_id == 0: | ||
for value in self.fields: | ||||
if value != 'name': | ||||
self.fields.pop(value) | ||||
self.fields['name'].label = "Filter Template Name" | ||||
else: | ||||
self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter, kwargs['initial']['filter_id'])) | ||||
|
r293 | jars_filter = JARSfilter.objects.get(pk=kwargs['initial']['filter_id']) | ||
|
r269 | labels = [f.name for f in jars_filter._meta.get_fields()] | ||
|
r293 | |||
|
r272 | for label in ['id']: | ||
|
r269 | labels.remove(label) | ||
for label in labels: | ||||
self.fields['name'].initial = kwargs['initial']['filter_id'] | ||||
self.fields[label].initial = getattr(jars_filter,label) | ||||
self.fields['name'].label = "Filter Template Name" | ||||
|
r263 | |||
|
r135 | class Meta: | ||
model = JARSfilter | ||||
|
r157 | exclude = ('type', 'parameters', 'status') | ||
|
r263 | |||
|
r269 | |||
|
r157 | class ExtFileField(forms.FileField): | ||
""" | ||||
Same as forms.FileField, but you can specify a file extension whitelist. | ||||
>>> from django.core.files.uploadedfile import SimpleUploadedFile | ||||
>>> | ||||
>>> t = ExtFileField(ext_whitelist=(".pdf", ".txt")) | ||||
>>> | ||||
>>> t.clean(SimpleUploadedFile('filename.pdf', 'Some File Content')) | ||||
>>> t.clean(SimpleUploadedFile('filename.txt', 'Some File Content')) | ||||
>>> | ||||
>>> t.clean(SimpleUploadedFile('filename.exe', 'Some File Content')) | ||||
Traceback (most recent call last): | ||||
... | ||||
ValidationError: [u'Not allowed filetype!'] | ||||
""" | ||||
def __init__(self, *args, **kwargs): | ||||
extensions = kwargs.pop("extensions") | ||||
self.extensions = [i.lower() for i in extensions] | ||||
super(ExtFileField, self).__init__(*args, **kwargs) | ||||
def clean(self, *args, **kwargs): | ||||
data = super(ExtFileField, self).clean(*args, **kwargs) | ||||
filename = data.name | ||||
ext = os.path.splitext(filename)[1] | ||||
ext = ext.lower() | ||||
if ext not in self.extensions: | ||||
raise forms.ValidationError('Not allowed file type: %s' % ext) | ||||
|
r263 | |||
|
r157 | |||
class JARSImportForm(forms.Form): | ||||
|
r263 | |||
|
r275 | file_name = ExtFileField(extensions=['.racp','.json']) | ||