from django import forms from django.utils.safestring import mark_safe from .models import DeviceType, Device, Experiment, Campaign, Configuration, Location 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)] class DatepickerWidget(forms.widgets.TextInput): def render(self, name, value, attrs=None): input_html = super(DatepickerWidget, self).render(name, value, attrs) html = '
'+input_html+'
' return mark_safe(html) class TimepickerWidget(forms.widgets.TextInput): def render(self, name, value, attrs=None): input_html = super(TimepickerWidget, self).render(name, value, attrs) html = '
'+input_html+'
' return mark_safe(html) class CampaignForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(CampaignForm, self).__init__(*args, **kwargs) self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs) self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs) 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 class Meta: model = Experiment fields = ['campaign', 'name', 'start_time', 'end_time'] class LocationForm(forms.ModelForm): class Meta: model = Location exclude = [''] class DeviceForm(forms.ModelForm): class Meta: model = Device exclude = ['status'] class ConfigurationForm(forms.ModelForm): class Meta: model = Configuration fields = ['experiment', 'device'] class DeviceTypeForm(forms.Form): device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))