forms.py
60 lines
| 2.4 KiB
| text/x-python
|
PythonLexer
|
r2 | from django import forms | ||
|
r6 | from django.utils.safestring import mark_safe | ||
|
r13 | from .models import DeviceType, Device, Experiment, Campaign, Configuration | ||
|
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): | ||||
|
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) | ||||
|
r13 | class Meta: | ||
model = Campaign | ||||
fields = ['name', 'start_date', 'end_date', 'tags', 'description', 'template'] | ||||
class ExperimentForm(forms.ModelForm): | ||||
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) | ||||
self.fields['campaign'].widget.attrs['readonly'] = True | ||||
|
r2 | class Meta: | ||
model = Experiment | ||||
|
r13 | fields = ['campaign', 'name', 'start_time', 'end_time'] | ||
|
r2 | |||
|
r13 | class DeviceForm(forms.ModelForm): | ||
|
r6 | class Meta: | ||
model = Device | ||||
exclude = ['status'] | ||||
|
r2 | |||
|
r13 | class ConfigurationForm(forms.ModelForm): | ||
class Meta: | ||||
model = Configuration | ||||
fields = ['experiment', 'device'] | ||||
|
r6 | class DeviceTypeForm(forms.Form): | ||
device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name'))) | ||||