forms.py
153 lines
| 5.5 KiB
| text/x-python
|
PythonLexer
|
r2 | from django import forms | |
|
r6 | from django.utils.safestring import mark_safe | |
|
r41 | from .models import DeviceType, Device, Experiment, Campaign, Configuration, Location | |
|
r2 | ||
|
r57 | FILE_FORMAT = ( | |
('json', 'json'), | |||
) | |||
DDS_FILE_FORMAT = ( | |||
('json', 'json'), | |||
('text', 'dds') | |||
) | |||
RC_FILE_FORMAT = ( | |||
('json', 'json'), | |||
|
r79 | ('text', 'racp'), | |
('binary', 'dat'), | |||
|
r57 | ) | |
|
r2 | def add_empty_choice(choices, pos=0, label='-----'): | |
if len(choices)>0: | |||
choices = list(choices) | |||
choices.insert(0, (0, label)) | |||
return choices | |||
else: | |||
return [(0, label)] | |||
|
r6 | class DatepickerWidget(forms.widgets.TextInput): | |
def render(self, name, value, attrs=None): | |||
input_html = super(DatepickerWidget, self).render(name, value, attrs) | |||
html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>' | |||
return mark_safe(html) | |||
|
r13 | class TimepickerWidget(forms.widgets.TextInput): | |
def render(self, name, value, attrs=None): | |||
input_html = super(TimepickerWidget, self).render(name, value, attrs) | |||
html = '<div class="input-group time">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span></div>' | |||
return mark_safe(html) | |||
class CampaignForm(forms.ModelForm): | |||
|
r85 | ||
experiments = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(), | |||
queryset=Experiment.objects.filter(template=True), | |||
required=False) | |||
|
r6 | def __init__(self, *args, **kwargs): | |
|
r13 | super(CampaignForm, self).__init__(*args, **kwargs) | |
|
r6 | self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs) | |
self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs) | |||
|
r85 | self.fields['description'].widget.attrs = {'rows': 2} | |
|
r91 | ||
if self.instance: | |||
self.fields['experiments'].queryset |= self.instance.experiments.all() | |||
|
r6 | ||
|
r13 | class Meta: | |
model = Campaign | |||
|
r47 | exclude = [''] | |
|
r13 | ||
class ExperimentForm(forms.ModelForm): | |||
|
r53 | ||
|
r13 | def __init__(self, *args, **kwargs): | |
super(ExperimentForm, self).__init__(*args, **kwargs) | |||
self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs) | |||
self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs) | |||
|
r2 | class Meta: | |
model = Experiment | |||
|
r89 | exclude = ['status'] | |
|
r2 | ||
|
r41 | class LocationForm(forms.ModelForm): | |
class Meta: | |||
model = Location | |||
exclude = [''] | |||
|
r13 | class DeviceForm(forms.ModelForm): | |
|
r6 | class Meta: | |
model = Device | |||
exclude = ['status'] | |||
|
r2 | ||
|
r13 | class ConfigurationForm(forms.ModelForm): | |
|
r85 | ||
def __init__(self, *args, **kwargs): | |||
super(ConfigurationForm, self).__init__(*args, **kwargs) | |||
if 'initial' in kwargs and 'experiment' in kwargs['initial'] and kwargs['initial']['experiment'] not in (0, '0'): | |||
self.fields['experiment'].widget.attrs['disabled'] = 'disabled' | |||
|
r13 | class Meta: | |
model = Configuration | |||
|
r47 | exclude = ['type', 'created_date', 'programmed_date', 'parameters'] | |
|
r13 | ||
|
r6 | class DeviceTypeForm(forms.Form): | |
device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name'))) | |||
|
r50 | ||
|
r53 | ||
class UploadFileForm(forms.Form): | |||
file = forms.FileField() | |||
|
r57 | ||
|
r53 | class DownloadFileForm(forms.Form): | |
|
r57 | format = forms.ChoiceField(choices= ((0, 'json'),) ) | |
def __init__(self, device_type, *args, **kwargs): | |||
super(DownloadFileForm, self).__init__(*args, **kwargs) | |||
self.fields['format'].choices = FILE_FORMAT | |||
if device_type == 'dds': | |||
self.fields['format'].choices = DDS_FILE_FORMAT | |||
if device_type == 'rc': | |||
self.fields['format'].choices = RC_FILE_FORMAT | |||
|
r53 | ||
|
r50 | class OperationForm(forms.Form): | |
|
r53 | # today = datetime.today() | |
|
r69 | # -----Campaigns from this month------[:5] | |
campaign = forms.ChoiceField(label="Campaign") | |||
def __init__(self, *args, **kwargs): | |||
if 'length' not in kwargs.keys(): | |||
length = None | |||
else: | |||
length = kwargs['length'] | |||
kwargs.pop('length') | |||
super(OperationForm, self).__init__(*args, **kwargs) | |||
self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')[:length] | |||
class OperationSearchForm(forms.Form): | |||
# -----ALL Campaigns------ | |||
campaign = forms.ChoiceField(label="Campaign") | |||
def __init__(self, *args, **kwargs): | |||
super(OperationSearchForm, self).__init__(*args, **kwargs) | |||
self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name') | |||
|
r85 | ||
class NewForm(forms.Form): | |||
create_from = forms.ChoiceField(choices=((0, '-----'), | |||
(1, 'Empty (blank)'), | |||
(2, 'Template'))) | |||
choose_template = forms.ChoiceField() | |||
def __init__(self, *args, **kwargs): | |||
template_choices = kwargs.pop('template_choices', []) | |||
super(NewForm, self).__init__(*args, **kwargs) | |||
self.fields['choose_template'].choices = add_empty_choice(template_choices) | |||
|
r50 |