from django import forms from django.utils.translation import gettext_lazy as _ from orchestra.forms import ReadOnlyFormMixin from orchestra.forms.widgets import SpanWidget class ResourceForm(ReadOnlyFormMixin, forms.ModelForm): verbose_name = forms.CharField(label=_("Name"), required=False, widget=SpanWidget(tag='')) allocated = forms.DecimalField(label=_("Allocated")) unit = forms.CharField(label=_("Unit"), required=False) class Meta: fields = ('verbose_name', 'used', 'last_update', 'allocated', 'unit') readonly_fields = ('verbose_name', 'unit') def __init__(self, *args, **kwargs): self.resource = kwargs.pop('resource', None) if self.resource: initial = kwargs.get('initial', {}) initial.update({ 'verbose_name': self.resource.get_verbose_name(), 'unit': self.resource.unit, }) kwargs['initial'] = initial super(ResourceForm, self).__init__(*args, **kwargs) if self.resource: if self.resource.on_demand: self.fields['allocated'].required = False self.fields['allocated'].widget = SpanWidget(original=None, display='') else: self.fields['allocated'].required = True self.fields['allocated'].initial = self.resource.default_allocation # def has_changed(self): # """ Make sure resourcedata objects are created for all resources """ # if not self.instance.pk: # return True # return super(ResourceForm, self).has_changed() def save(self, *args, **kwargs): self.instance.resource_id = self.resource.pk return super(ResourceForm, self).save(*args, **kwargs)