forms.py
82 lines
| 3.2 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 | |
|
r6 | ||
class JARSConfigurationForm(forms.ModelForm): | |||
def __init__(self, *args, **kwargs): | |||
super(JARSConfigurationForm, self).__init__(*args, **kwargs) | |||
instance = getattr(self, 'instance', None) | |||
|
r118 | ||
|
r6 | if instance and instance.pk: | |
|
r26 | devices = Device.objects.filter(device_type__name='jars') | |
|
r123 | ||
if instance.experiment: | |||
experiments = Experiment.objects.filter(pk=instance.experiment.id) | |||
self.fields['experiment'].widget.choices = [(experiment.id, experiment) for experiment in experiments] | |||
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() | |
|
r139 | ||
|
r123 | #-------------JARS Configuration needs an Experiment----------------- | |
def clean(self): | |||
cleaned_data = super(JARSConfigurationForm, self).clean() | |||
experiment = cleaned_data.get('experiment') | |||
if experiment == None: | |||
msg = "Error: Jars Configuration needs an Experiment" | |||
self.add_error('experiment', msg) | |||
class Meta: | |||
model = JARSConfiguration | |||
|
r136 | exclude = ('type', 'parameters', 'status', 'filter_parms') | |
|
r135 | ||
class JARSfilterForm(forms.ModelForm): | |||
def __init__(self, *args, **kwargs): | |||
super(JARSfilterForm, self).__init__(*args, **kwargs) | |||
instance = getattr(self, 'instance', None) | |||
|
r139 | ||
self.fields['fch_decimal'].widget.attrs['readonly'] = True | |||
|
r135 | ||
class Meta: | |||
model = JARSfilter | |||
|
r157 | exclude = ('type', 'parameters', 'status') | |
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) | |||
class JARSImportForm(forms.Form): | |||
#file_name = ExtFileField(extensions=['.racp', '.json', '.dat']) | |||
file_name = ExtFileField(extensions=['.json']) |