mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 17:26:10 -06:00
WIP
This commit is contained in:
parent
9336670fec
commit
48cb2036e9
@ -1,7 +1,9 @@
|
|||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
|
||||||
|
from dcim.filtersets import SiteFilterSet
|
||||||
from dcim.forms import SiteFilterForm
|
from dcim.forms import SiteFilterForm
|
||||||
|
from dcim.models import Site
|
||||||
|
|
||||||
|
|
||||||
class ObjectSelectorView(View):
|
class ObjectSelectorView(View):
|
||||||
@ -11,10 +13,31 @@ class ObjectSelectorView(View):
|
|||||||
form_class = self._get_form_class()
|
form_class = self._get_form_class()
|
||||||
form = form_class(request.GET)
|
form = form_class(request.GET)
|
||||||
|
|
||||||
|
if '_search' in request.GET:
|
||||||
|
# Return only search results
|
||||||
|
model = self._get_model()
|
||||||
|
filterset = self._get_filterset_class()
|
||||||
|
|
||||||
|
queryset = model.objects.restrict(request.user)
|
||||||
|
if filterset:
|
||||||
|
queryset = filterset(request.GET, queryset, request=request).qs
|
||||||
|
|
||||||
|
return render(request, 'htmx/object_selector_results.html', {
|
||||||
|
'results': queryset,
|
||||||
|
})
|
||||||
|
|
||||||
return render(request, self.template_name, {
|
return render(request, self.template_name, {
|
||||||
'form': form,
|
'form': form,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def _get_model(self):
|
||||||
|
# TODO: Determine model from request parameters
|
||||||
|
return Site
|
||||||
|
|
||||||
def _get_form_class(self):
|
def _get_form_class(self):
|
||||||
# TODO: Determine form class from request parameters
|
# TODO: Determine form class from model
|
||||||
return SiteFilterForm
|
return SiteFilterForm
|
||||||
|
|
||||||
|
def _get_filterset_class(self):
|
||||||
|
# TODO: Determine filterset class from model
|
||||||
|
return SiteFilterSet
|
||||||
|
@ -119,5 +119,5 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block modals %}
|
{% block modals %}
|
||||||
{% include 'inc/htmx_modal.html' %}
|
{% include 'inc/htmx_modal.html' with size='lg' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -1,11 +1,30 @@
|
|||||||
{% load form_helpers %}
|
{% load form_helpers %}
|
||||||
|
|
||||||
<form>
|
<div class="modal-header">
|
||||||
<div class="modal-header">
|
<h5 class="modal-title">Object Selector</h5>
|
||||||
<h5 class="modal-title">Object Selector</h5>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
</div>
|
||||||
|
<div class="modal-body row">
|
||||||
|
<div class="col-3">
|
||||||
|
<ul class="nav nav-pills flex-column">
|
||||||
|
{% for field in form.visible_fields %}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="#" data-bs-toggle="tab" data-bs-target="#selector{{ forloop.counter }}">{{ field.label }}</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="col-9">
|
||||||
{% render_form form %}
|
<form hx-get="{% url 'htmx_object_selector' %}" hx-target="#results_list">
|
||||||
|
<div class="tab-content p-1">
|
||||||
|
{% for field in form.visible_fields %}
|
||||||
|
<div class="tab-pane{% if forloop.first %} active{% endif %}" id="selector{{ forloop.counter }}" role="tabpanel">{% render_field field %}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<div class="text-end">
|
||||||
|
<button type="submit" name="_search" value="true" class="btn btn-sm btn-primary">Submit</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div id="results_list" class="mt-3"></div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
|
13
netbox/templates/htmx/object_selector_results.html
Normal file
13
netbox/templates/htmx/object_selector_results.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<div class="list-group">
|
||||||
|
{% for object in results %}
|
||||||
|
<a href="#" class="list-group-item list-group-item-action">
|
||||||
|
<h6 class="mb-1">
|
||||||
|
{{ object }}
|
||||||
|
{% if object.status %}{% badge object.get_status_display bg_color=object.get_status_color %}{% endif %}
|
||||||
|
</h6>
|
||||||
|
{% if object.description %}
|
||||||
|
<small>{{ object.description }}</small>
|
||||||
|
{% endif %}
|
||||||
|
</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
@ -1,5 +1,5 @@
|
|||||||
<div class="modal fade" id="htmx-modal" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="htmx-modal" tabindex="-1" aria-hidden="true">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog{% if size %} modal-{{ size }}{% endif %}">
|
||||||
<div class="modal-content" id="htmx-modal-content">
|
<div class="modal-content" id="htmx-modal-content">
|
||||||
{# Dynamic content goes here #}
|
{# Dynamic content goes here #}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user