2828from . import field_types , filtersets , forms , tables
2929from .models import CustomObject , CustomObjectType , CustomObjectTypeField
3030from extras .choices import CustomFieldTypeChoices
31+ from netbox_custom_objects .api .serializers import get_serializer_class
3132from netbox_custom_objects .constants import APP_LABEL
3233
3334logger = logging .getLogger ("netbox_custom_objects.views" )
@@ -141,6 +142,14 @@ def get_table(self, data, request, bulk_actions=True):
141142 return super ().get_table (data , request , bulk_actions = bulk_actions )
142143
143144
145+ class CustomObjectModelMixin :
146+ def get_model (self , custom_object_type ):
147+ model = custom_object_type .get_model ()
148+ get_serializer_class (model )
149+ custom_object_type .register_custom_object_search_index (model )
150+ return model
151+
152+
144153#
145154# Custom Object Types
146155#
@@ -155,17 +164,17 @@ class CustomObjectTypeListView(generic.ObjectListView):
155164
156165
157166@register_model_view (CustomObjectType )
158- class CustomObjectTypeView (CustomObjectTableMixin , generic .ObjectView ):
167+ class CustomObjectTypeView (CustomObjectTableMixin , CustomObjectModelMixin , generic .ObjectView ):
159168 queryset = CustomObjectType .objects .all ()
160169
161170 def get_table (self , data , request , bulk_actions = True ):
162171 self .custom_object_type = self .get_object (** self .kwargs )
163- model = self .custom_object_type . get_model ()
172+ model = self .get_model (self . custom_object_type )
164173 data = model .objects .all ()
165174 return super ().get_table (data , request , bulk_actions = False )
166175
167176 def get_extra_context (self , request , instance ):
168- model = instance .get_model ()
177+ model = self .get_model (instance )
169178
170179 # Get fields and group them by group_name
171180 fields = instance .fields .all ().order_by ("group_name" , "weight" , "name" )
@@ -193,13 +202,13 @@ class CustomObjectTypeEditView(generic.ObjectEditView):
193202
194203
195204@register_model_view (CustomObjectType , "delete" )
196- class CustomObjectTypeDeleteView (generic .ObjectDeleteView ):
205+ class CustomObjectTypeDeleteView (CustomObjectModelMixin , generic .ObjectDeleteView ):
197206 queryset = CustomObjectType .objects .all ()
198207 default_return_url = "plugins:netbox_custom_objects:customobjecttype_list"
199208
200209 def _get_dependent_objects (self , obj ):
201210 dependent_objects = super ()._get_dependent_objects (obj )
202- model = obj .get_model ()
211+ model = self .get_model (obj )
203212 dependent_objects [model ] = list (model .objects .all ())
204213
205214 # Find CustomObjectTypeFields that reference this CustomObjectType
@@ -226,7 +235,7 @@ class CustomObjectTypeFieldEditView(generic.ObjectEditView):
226235
227236
228237@register_model_view (CustomObjectTypeField , "delete" )
229- class CustomObjectTypeFieldDeleteView (generic .ObjectDeleteView ):
238+ class CustomObjectTypeFieldDeleteView (CustomObjectModelMixin , generic .ObjectDeleteView ):
230239 template_name = "netbox_custom_objects/field_delete.html"
231240 queryset = CustomObjectTypeField .objects .all ()
232241
@@ -243,7 +252,7 @@ def get(self, request, *args, **kwargs):
243252 obj = self .get_object (** kwargs )
244253 form = ConfirmationForm (initial = request .GET )
245254
246- model = obj . custom_object_type . get_model ()
255+ model = self . get_model (obj . custom_object_type )
247256 kwargs = {
248257 f"{ obj .name } __isnull" : False ,
249258 }
@@ -280,7 +289,7 @@ def get(self, request, *args, **kwargs):
280289
281290 def _get_dependent_objects (self , obj ):
282291 dependent_objects = super ()._get_dependent_objects (obj )
283- model = obj . custom_object_type . get_model ()
292+ model = self . get_model (obj . custom_object_type )
284293 kwargs = {
285294 f"{ obj .name } __isnull" : False ,
286295 }
@@ -314,7 +323,7 @@ class CustomObjectTypeBulkDeleteView(generic.BulkDeleteView):
314323#
315324
316325
317- class CustomObjectListView (CustomObjectTableMixin , generic .ObjectListView ):
326+ class CustomObjectListView (CustomObjectTableMixin , CustomObjectModelMixin , generic .ObjectListView ):
318327 queryset = None
319328 custom_object_type = None
320329 template_name = "netbox_custom_objects/custom_object_list.html"
@@ -332,7 +341,7 @@ def get_queryset(self, request):
332341 self .custom_object_type = get_object_or_404 (
333342 CustomObjectType , slug = custom_object_type
334343 )
335- model = self .custom_object_type . get_model ()
344+ model = self .get_model (self . custom_object_type )
336345 return model .objects .all ()
337346
338347 def get_filterset (self ):
@@ -370,23 +379,23 @@ def get_extra_context(self, request):
370379
371380
372381@register_model_view (CustomObject )
373- class CustomObjectView (generic .ObjectView ):
382+ class CustomObjectView (CustomObjectModelMixin , generic .ObjectView ):
374383 template_name = "netbox_custom_objects/customobject.html"
375384
376385 def get_queryset (self , request ):
377386 custom_object_type = self .kwargs .get ("custom_object_type" , None )
378387 object_type = get_object_or_404 (
379388 CustomObjectType , slug = custom_object_type
380389 )
381- model = object_type .get_model ()
390+ model = self .get_model (object_type )
382391 return model .objects .all ()
383392
384393 def get_object (self , ** kwargs ):
385394 custom_object_type = self .kwargs .get ("custom_object_type" , None )
386395 object_type = get_object_or_404 (
387396 CustomObjectType , slug = custom_object_type
388397 )
389- model = object_type .get_model ()
398+ model = self .get_model (object_type )
390399 # Filter out custom_object_type from kwargs for the object lookup
391400 lookup_kwargs = {
392401 k : v for k , v in self .kwargs .items () if k != "custom_object_type"
@@ -413,7 +422,7 @@ def get_extra_context(self, request, instance):
413422
414423
415424@register_model_view (CustomObject , "edit" )
416- class CustomObjectEditView (generic .ObjectEditView ):
425+ class CustomObjectEditView (CustomObjectModelMixin , generic .ObjectEditView ):
417426 template_name = "netbox_custom_objects/customobject_edit.html"
418427 form = None
419428 queryset = None
@@ -436,7 +445,8 @@ def get_object(self, **kwargs):
436445 object_type = get_object_or_404 (
437446 CustomObjectType , slug = custom_object_type
438447 )
439- model = object_type .get_model ()
448+ model = self .get_model (object_type )
449+
440450 if not self .kwargs .get ("pk" , None ):
441451 # We're creating a new object
442452 return model ()
@@ -573,7 +583,7 @@ def custom_save(self, commit=True):
573583
574584
575585@register_model_view (CustomObject , "delete" )
576- class CustomObjectDeleteView (generic .ObjectDeleteView ):
586+ class CustomObjectDeleteView (CustomObjectModelMixin , generic .ObjectDeleteView ):
577587 queryset = None
578588 object = None
579589 default_return_url = "plugins:netbox_custom_objects:customobject_list"
@@ -593,7 +603,7 @@ def get_object(self, **kwargs):
593603 object_type = get_object_or_404 (
594604 CustomObjectType , slug = custom_object_type
595605 )
596- model = object_type .get_model ()
606+ model = self .get_model (object_type )
597607 return get_object_or_404 (model .objects .all (), ** self .kwargs )
598608
599609 def get_return_url (self , request , obj = None ):
@@ -614,7 +624,7 @@ def get_return_url(self, request, obj=None):
614624
615625
616626@register_model_view (CustomObject , "bulk_edit" , path = "edit" , detail = False )
617- class CustomObjectBulkEditView (CustomObjectTableMixin , generic .BulkEditView ):
627+ class CustomObjectBulkEditView (CustomObjectTableMixin , CustomObjectModelMixin , generic .BulkEditView ):
618628 queryset = None
619629 custom_object_type = None
620630 table = None
@@ -633,7 +643,7 @@ def get_queryset(self, request):
633643 self .custom_object_type = CustomObjectType .objects .get (
634644 slug = custom_object_type
635645 )
636- model = self .custom_object_type . get_model ()
646+ model = self .get_model (self . custom_object_type )
637647 return model .objects .all ()
638648
639649 def get_form (self , queryset ):
@@ -673,7 +683,7 @@ def get_form(self, queryset):
673683
674684
675685@register_model_view (CustomObject , "bulk_delete" , path = "delete" , detail = False )
676- class CustomObjectBulkDeleteView (CustomObjectTableMixin , generic .BulkDeleteView ):
686+ class CustomObjectBulkDeleteView (CustomObjectTableMixin , CustomObjectModelMixin , generic .BulkDeleteView ):
677687 queryset = None
678688 custom_object_type = None
679689 table = None
@@ -691,12 +701,12 @@ def get_queryset(self, request):
691701 self .custom_object_type = CustomObjectType .objects .get (
692702 slug = custom_object_type
693703 )
694- model = self .custom_object_type . get_model ()
704+ model = self .get_model (self . custom_object_type )
695705 return model .objects .all ()
696706
697707
698708@register_model_view (CustomObject , "bulk_import" , path = "import" , detail = False )
699- class CustomObjectBulkImportView (generic .BulkImportView ):
709+ class CustomObjectBulkImportView (CustomObjectModelMixin , generic .BulkImportView ):
700710 queryset = None
701711 model_form = None
702712
@@ -720,7 +730,7 @@ def get_queryset(self, request):
720730 self .custom_object_type = CustomObjectType .objects .get (
721731 name__iexact = custom_object_type
722732 )
723- model = self .custom_object_type . get_model ()
733+ model = self .get_model (self . custom_object_type )
724734 return model .objects .all ()
725735
726736 def get_model_form (self , queryset ):
@@ -756,7 +766,7 @@ def get_model_form(self, queryset):
756766 return form
757767
758768
759- class CustomObjectJournalView (ConditionalLoginRequiredMixin , View ):
769+ class CustomObjectJournalView (ConditionalLoginRequiredMixin , CustomObjectModelMixin , View ):
760770 """
761771 Custom journal view for CustomObject instances.
762772 Shows all journal entries for a custom object.
@@ -772,7 +782,7 @@ def get(self, request, custom_object_type, **kwargs):
772782 object_type = get_object_or_404 (
773783 CustomObjectType , slug = custom_object_type
774784 )
775- model = object_type .get_model ()
785+ model = self .get_model (object_type )
776786
777787 # Get the specific object
778788 lookup_kwargs = {k : v for k , v in kwargs .items () if k != "custom_object_type" }
@@ -828,7 +838,7 @@ def get(self, request, custom_object_type, **kwargs):
828838 )
829839
830840
831- class CustomObjectChangeLogView (ConditionalLoginRequiredMixin , View ):
841+ class CustomObjectChangeLogView (ConditionalLoginRequiredMixin , CustomObjectModelMixin , View ):
832842 """
833843 Custom changelog view for CustomObject instances.
834844 Shows all changes made to a custom object.
@@ -844,7 +854,7 @@ def get(self, request, custom_object_type, **kwargs):
844854 object_type = get_object_or_404 (
845855 CustomObjectType , slug = custom_object_type
846856 )
847- model = object_type .get_model ()
857+ model = self .get_model (object_type )
848858
849859 # Get the specific object
850860 lookup_kwargs = {k : v for k , v in kwargs .items () if k != "custom_object_type" }
0 commit comments