import json from django import forms from .models import RCConfiguration, RCLine, RCLineType class RCConfigurationForm(forms.ModelForm): class Meta: model = RCConfiguration exclude = ('clock', 'ipp', 'ntx', 'clock_divider') class RCLineForm(forms.ModelForm): class Meta: model = RCLine fields = ('rc_configuration', 'line_type', 'channel') widgets = { 'channel': forms.HiddenInput(), } def save(self): line = super(RCLineForm, self).save() #auto add channel line.channel = RCLine.objects.filter(rc_configuration=line.rc_configuration).count()-1 #auto add position for TX, TR & CODE if line.line_type.name in ('tx', 'tr', 'code'): line.position = RCLine.objects.filter(rc_configuration=line.rc_configuration, line_type=line.line_type).count()-1 #add default params params = {} for field in json.loads(line.line_type.params): params[field['name']] = field['value'] line.params = json.dumps(params) line.save() return class RCLineViewForm(forms.Form): def __init__(self, *args, **kwargs): extra_fields = kwargs.pop('extra_fields') super(RCLineViewForm, self).__init__(*args, **kwargs) for label, value in extra_fields.items(): self.fields[label] = forms.CharField(initial=value)