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

View File

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

View File

@ -3456,6 +3456,7 @@ class PowerFeedForm(BootstrapMixin, CustomFieldForm):
} }
) )
) )
comments = CommentField()
tags = TagField( tags = TagField(
required=False required=False
) )
@ -3479,6 +3480,14 @@ class PowerFeedForm(BootstrapMixin, CustomFieldForm):
'phase': StaticSelect2(), '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): class PowerFeedCSVForm(forms.ModelForm):
site = forms.ModelChoiceField( site = forms.ModelChoiceField(
@ -3573,11 +3582,11 @@ class PowerFeedBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEd
} }
) )
) )
rackgroup = forms.ModelChoiceField( rack = forms.ModelChoiceField(
queryset=RackGroup.objects.all(), queryset=Rack.objects.all(),
required=False, required=False,
widget=APISelect( widget=APISelect(
api_url="/api/dcim/rack-groups", api_url="/api/dcim/racks",
) )
) )
status = forms.ChoiceField( status = forms.ChoiceField(
@ -3669,3 +3678,12 @@ class PowerFeedFilterForm(BootstrapMixin, CustomFieldFilterForm):
required=False, required=False,
widget=StaticSelect2() 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, 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): class PowerFeed(ChangeLoggedModel, CableTermination, CustomFieldModel):
""" """
@ -2953,6 +2961,14 @@ class PowerFeed(ChangeLoggedModel, CableTermination, CustomFieldModel):
self.comments, 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): def get_type_class(self):
return STATUS_CLASSES[self.type] return STATUS_CLASSES[self.type]

View File

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