Register additional tab to plugin model #11641
-
Hello, i'm trying to register additional tab ( https://docs.netbox.dev/en/stable/plugins/development/views/#additional-tabs ) to my plugin model. Examples:
@register_model_view(Contract, 'consoleports', path='console-ports')
class ContractConsolePortsView(DeviceComponentsView):
child_model = ConsolePort
table = DeviceConsolePortTable
filterset = ConsolePortFilterSet
template_name = 'dcim/device/consoleports.html',
tab = ViewTab(
label=('Console Ports'),
badge=0,
weight=550,
hide_if_empty=True
) But the tab does not render on the object page. ipdb> from pprint import pprint
ipdb> pprint(registry['views']['inventory_monitor']['contract'])
[{'kwargs': {'model': <class 'inventory_monitor.models.Contract'>},
'name': 'journal',
'path': 'journal',
'view': 'netbox.views.generic.ObjectJournalView'},
{'kwargs': {'model': <class 'inventory_monitor.models.Contract'>},
'name': 'changelog',
'path': 'changelog',
'view': 'netbox.views.generic.ObjectChangeLogView'},
{'kwargs': {},
'name': 'contract-attachment_list',
'path': 'contract-attachment_list',
'view': <class 'netbox_attachments.template_content.create_tab_view.<locals>.View'>},
{'kwargs': {},
'name': '',
'path': '',
'view': <class 'inventory_monitor.views.ContractView'>},
{'kwargs': {},
'name': 'consoleports',
'path': 'console-ports',
'view': <class 'inventory_monitor.views.ContractConsolePortsView'>}] The only tab which is displayed is Registering tabs to "Core" models, like "Device" works fine. Are there some caveats, that I cannot add tabs to my plugin? I create a discussion on slack, where I tried several things. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
I didn't check the slack discussion, but eventually came up with the solution, so posting it here:
include(get_model_urls(<app_label>, <model_name>))) For example, how it's done in core models: Line 191 in 0e34fba 2. Or you also can do it "manually", for me it was: views.py
@register_model_view(
models.ProviderService,
name="contacts",
)
class ProviderServiceContactsView(ObjectContactsView):
queryset = models.ProviderService.objects.all()
urlpatterns = (
path("provider-services/<int:pk>/",
views.ProviderServiceView.as_view(), name="providerservice"),
path("provider-services/<int:pk>/edit/", views.ProviderServiceEditView.as_view(),
name="providerservice_edit"),
path("provider-services/<int:pk>/delete/", views.ProviderServiceDeleteView.as_view(),
name="providerservice_delete"),
path("provider-services/<int:pk>/changelog/", ObjectChangeLogView.as_view(),
kwargs={"model": models.ProviderService}, name="providerservice_changelog"),
# Without this line, custom tab was not working:
path("provider-services/<int:pk>/contacts/", views.ProviderServiceContactsView.as_view(),
name="providerservice_contacts"),
) |
Beta Was this translation helpful? Give feedback.
I didn't check the slack discussion, but eventually came up with the solution, so posting it here:
urls.py
for your custom plugin (basically,get_model_urls
seems to load all urls fromregistry
)For example, how it's done in core models:
netbox/netbox/dcim/urls.py
Line 191 in 0e34fba
2. Or you also can do it "manually", for me it was:
views.py
urls.py
…