Misc cleanup

This commit is contained in:
Jeremy Stretch 2019-04-11 10:49:43 -04:00
parent b22fd2bc44
commit 05c19af2a3
5 changed files with 44 additions and 8 deletions

View File

@ -544,7 +544,7 @@ class VirtualChassisViewSet(ModelViewSet):
#
class PowerPanelViewSet(ModelViewSet):
queryset = PowerPanel.objects.all()
queryset = PowerPanel.objects.select_related('site', 'rack_group')
serializer_class = serializers.PowerPanelSerializer
filterset_class = filters.PowerPanelFilter
@ -553,8 +553,8 @@ class PowerPanelViewSet(ModelViewSet):
# Power feeds
#
class PowerFeedViewSet(ModelViewSet):
queryset = PowerFeed.objects.all()
class PowerFeedViewSet(CustomFieldModelViewSet):
queryset = PowerFeed.objects.select_related('power_panel', 'rack').prefetch_related('tags')
serializer_class = serializers.PowerFeedSerializer
filterset_class = filters.PowerFeedFilter

View File

@ -1135,10 +1135,11 @@ class PowerFeedFilter(CustomFieldFilterSet):
queryset=Rack.objects.all(),
label='Rack (ID)',
)
tag = TagFilter()
class Meta:
model = PowerFeed
fields = ['name', 'status', 'type', 'supply', 'phase']
fields = ['name', 'status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'power_factor']
def search(self, queryset, name, value):
if not value.strip():

View File

@ -3456,6 +3456,7 @@ class PowerFeedForm(BootstrapMixin, CustomFieldForm):
}
)
)
comments = CommentField()
tags = TagField(
required=False
)
@ -3479,6 +3480,14 @@ class PowerFeedForm(BootstrapMixin, CustomFieldForm):
'phase': StaticSelect2(),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Initialize site field
if self.instance and self.instance.power_panel:
self.initial['site'] = self.instance.power_panel.site
class PowerFeedCSVForm(forms.ModelForm):
site = forms.ModelChoiceField(
@ -3573,11 +3582,11 @@ class PowerFeedBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEd
}
)
)
rackgroup = forms.ModelChoiceField(
queryset=RackGroup.objects.all(),
rack = forms.ModelChoiceField(
queryset=Rack.objects.all(),
required=False,
widget=APISelect(
api_url="/api/dcim/rack-groups",
api_url="/api/dcim/racks",
)
)
status = forms.ChoiceField(
@ -3669,3 +3678,12 @@ class PowerFeedFilterForm(BootstrapMixin, CustomFieldFilterForm):
required=False,
widget=StaticSelect2()
)
voltage = forms.IntegerField(
required=False
)
amperage = forms.IntegerField(
required=False
)
power_factor = forms.IntegerField(
required=False
)

View File

@ -2853,6 +2853,14 @@ class PowerPanel(ChangeLoggedModel):
self.name,
)
def clean(self):
# RackGroup must belong to assigned Site
if self.rack_group and self.rack_group.site != self.site:
raise ValidationError("Rack group {} ({}) is in a different site than {}".format(
self.rack_group, self.rack_group.site, self.site
))
class PowerFeed(ChangeLoggedModel, CableTermination, CustomFieldModel):
"""
@ -2953,6 +2961,14 @@ class PowerFeed(ChangeLoggedModel, CableTermination, CustomFieldModel):
self.comments,
)
def clean(self):
# Rack must belong to same Site as PowerPanel
if self.rack and self.rack.site != self.power_panel.site:
raise ValidationError("Rack {} ({}) and power panel {} ({}) are in different sites".format(
self.rack, self.rack.site, self.power_panel, self.power_panel.site
))
def get_type_class(self):
return STATUS_CLASSES[self.type]

View File

@ -8,6 +8,7 @@
<div class="col-sm-8 col-md-9">
<ol class="breadcrumb">
<li><a href="{% url 'dcim:powerfeed_list' %}">Power Feeds</a></li>
<li><a href="{{ powerfeed.power_panel.site.get_absolute_url }}">{{ powerfeed.power_panel.site }}</a></li>
<li><a href="{{ powerfeed.power_panel.get_absolute_url }}">{{ powerfeed.power_panel }}</a></li>
{% if powerfeed.rack %}
<li><a href="{{ powerfeed.rack.get_absolute_url }}">{{ powerfeed.rack }}</a></li>
@ -118,7 +119,7 @@
<td>{{ powerfeed.get_phase_display }}</td>
</tr>
<tr>
<td>Max Utilization</td>
<td>Power Factor</td>
<td>{{ powerfeed.power_factor }}%</td>
</tr>
</table>