from django import forms from apps.main.models import Device from .models import DDSConfiguration from django.core.validators import MinValueValidator, MaxValueValidator class DDSConfigurationForm(forms.ModelForm): frequency = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)]) phase = forms.FloatField(label='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)]) frequency_mod = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], required=False) phase_mod = forms.FloatField(label='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False) def __init__(self, *args, **kwargs): #request = kwargs.pop('request') super(DDSConfigurationForm, self).__init__(*args, **kwargs) instance = getattr(self, 'instance', None) if instance and instance.pk: devices = Device.objects.filter(device_type__name='dds') items = devices.values('id', 'name', 'device_type__name', 'ip_address') self.fields['experiment'].widget.attrs['readonly'] = True self.fields['device'].widget.choices = [(item['id'], '[%s]: %s | %s' % (item['device_type__name'], item['name'], item['ip_address'])) for item in items] def clean(self): # Custom validation to force an integer when type of unit = "Unit" return class Meta: model = DDSConfiguration fields = ('experiment', 'device', 'clock', 'multiplier', 'modulation')