1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

WIP: Moving JobResults out of the admin panel

This commit is contained in:
kkthxbye-code
2022-09-23 13:44:24 +02:00
parent cbb3378d10
commit 06dea8ef3f
7 changed files with 88 additions and 31 deletions

View File

@ -87,27 +87,6 @@ class CustomFieldFilterSet(BaseFilterSet):
Q(description__icontains=value)
)
class JobResultFilterSet(BaseFilterSet):
q = django_filters.CharFilter(
method='search',
label='Search',
)
# TODO: Add filters
class Meta:
model = JobResult
fields = [
'id', 'name', 'obj_type', 'created', 'completed', 'user', 'status'
]
def search(self, queryset, name, value):
if not value.strip():
return queryset
return queryset.filter(
Q(name__icontains=value)
)
class CustomLinkFilterSet(BaseFilterSet):
q = django_filters.CharFilter(
method='search',
@ -472,7 +451,8 @@ class JobResultFilterSet(BaseFilterSet):
if not value.strip():
return queryset
return queryset.filter(
Q(user__username__icontains=value)
Q(user__username__icontains=value) |
Q(name__icontains=value)
)

View File

@ -518,8 +518,7 @@ class JobResult(models.Model):
return str(self.job_id)
def get_absolute_url(self):
# TODO: Fix this to point the right place
return reverse('virtualization:clustertype', args=[self.pk])
return reverse('extras:jobresult', args=[self.pk])
@property
def duration(self):

View File

@ -48,12 +48,9 @@ class JobResultTable(NetBoxTable):
name = tables.Column(
linkify=True
)
#obj_type = columns.ContentTypesColumn()
required = columns.BooleanColumn()
ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility")
actions = columns.ActionsColumn(
actions=() # TODO: Delete
actions=('delete',)
)
class Meta(NetBoxTable.Meta):

View File

@ -104,8 +104,10 @@ urlpatterns = [
re_path(r'^reports/(?P<module>.([^.]+)).(?P<name>.(.+))/', views.ReportView.as_view(), name='report'),
# Job results
path('job-results/', views.JobResultListView.as_view(), name='jobresult_view'),
# path('custom-fields/<int:pk>/', views.CustomFieldView.as_view(), name='customfield'),
path('job-results/', views.JobResultListView.as_view(), name='jobresult_list'),
path('job-results/<int:pk>/', views.JobResultView.as_view(), name='jobresult'),
path('job-results/delete/', views.JobResultBulkDeleteView.as_view(), name='jobresult_bulk_delete'),
path('job-results/<int:pk>/delete/', views.JobResultDeleteView.as_view(), name='jobresult_delete'),
# Scripts
path('scripts/', views.ScriptListView.as_view(), name='script_list'),

View File

@ -781,8 +781,22 @@ class ScriptResultView(ContentTypePermissionRequiredMixin, GetScriptMixin, View)
# Job results
#
class JobResultView(generic.ObjectView):
queryset = JobResult.objects.all()
class JobResultListView(generic.ObjectListView):
queryset = JobResult.objects.all()
filterset = filtersets.JobResultFilterSet
filterset_form = forms.JobResultFilterForm
table = tables.JobResultTable
actions = ('delete', 'bulk_delete', )
class JobResultDeleteView(generic.ObjectDeleteView):
queryset = JobResult.objects.all()
class JobResultBulkDeleteView(generic.BulkDeleteView):
queryset = JobResult.objects.all()
filterset = filtersets.JobResultFilterSet
table = tables.JobResultTable

View File

@ -375,6 +375,11 @@ OTHER_MENU = Menu(
link_text='Scripts',
permissions=['extras.view_script']
),
MenuItem(
link='extras:jobresult_list',
link_text='Job Results',
permissions=['extras.view_jobresult'],
),
),
),
MenuGroup(

View File

@ -0,0 +1,60 @@
{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
{% block title %}{{ object.name }} ({{object.job_id}}){% endblock %}
{# JobResult does not support add/edit controls #}
{% block controls %}{% endblock %}
{% block subtitle %}{% endblock %}
{% block content %}
<div class="row">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Tag
</h5>
<div class="card-body">
<table class="table table-hover panel-body attr-table">
<tr>
<th scope="row">Name</th>
<td>
{{ object.name }}
</td>
</tr>
<tr>
<th scope="row">Created</th>
<td>
{{ object.created|annotated_date }}
</td>
</tr>
<tr>
<th scope="row">Completed</th>
<td>
{{ object.completed|annotated_date }}
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
TODO
</h5>
<div class="card-body">
<table class="table table-hover panel-body attr-table">
TODO
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>
{% endblock %}