@@ -412,6 +412,8 @@ def __str__(self):
412412
413413 @property
414414 def model_class (self ):
415+ if self .related_object_type .app_label == 'netbox_custom_objects' :
416+ return apps .get_model (self .related_object_type .app_label , 'customobjecttype' )
415417 return apps .get_model (self .related_object_type .app_label , self .related_object_type .model )
416418
417419 @property
@@ -626,6 +628,26 @@ def deserialize(self, value):
626628 return model .objects .filter (pk__in = value )
627629 return value
628630
631+ @property
632+ def related_custom_object_type (self ):
633+ if self .related_object_type .app_label != 'netbox_custom_objects' :
634+ return None
635+ return CustomObjectType .objects .get (slug = self .related_object_type .model )
636+
637+ @property
638+ def related_object_queryset (self ):
639+ if model_class := self .related_object_type .model_class ():
640+ return model_class .objects .all ()
641+ return CustomObject .objects .filter (custom_object_type = self .related_custom_object_type )
642+
643+ @property
644+ def related_custom_object_type_filter (self ):
645+ if self .related_object_type .app_label != 'netbox_custom_objects' :
646+ return {}
647+ return {
648+ 'custom_object_type' : self .related_custom_object_type .id ,
649+ }
650+
629651 def to_form_field (self , set_initial = True , enforce_required = True , enforce_visibility = True , for_csv_import = False ):
630652 """
631653 Return a form field suitable for setting a CustomField's value for an object.
@@ -719,30 +741,32 @@ def to_form_field(self, set_initial=True, enforce_required=True, enforce_visibil
719741
720742 # Object
721743 elif self .type == CustomFieldTypeChoices .TYPE_OBJECT :
722- model = self .related_object_type .model_class ()
723744 field_class = CSVModelChoiceField if for_csv_import else DynamicModelChoiceField
724745 kwargs = {
725- 'queryset' : model . objects . all () ,
746+ 'queryset' : self . related_object_queryset ,
726747 'required' : required ,
727748 'initial' : initial ,
728749 }
729750 if not for_csv_import :
730- kwargs ['query_params' ] = self .related_object_filter
751+ query_params = self .related_object_filter or {}
752+ query_params .update (self .related_custom_object_type_filter )
753+ kwargs ['query_params' ] = query_params
731754 kwargs ['selector' ] = True
732755
733756 field = field_class (** kwargs )
734757
735758 # Multiple objects
736759 elif self .type == CustomFieldTypeChoices .TYPE_MULTIOBJECT :
737- model = self .related_object_type .model_class ()
738760 field_class = CSVModelMultipleChoiceField if for_csv_import else DynamicModelMultipleChoiceField
739761 kwargs = {
740- 'queryset' : model . objects . all () ,
762+ 'queryset' : self . related_object_queryset ,
741763 'required' : required ,
742764 'initial' : initial ,
743765 }
744766 if not for_csv_import :
745- kwargs ['query_params' ] = self .related_object_filter
767+ query_params = self .related_object_filter or {}
768+ query_params .update (self .related_custom_object_type_filter )
769+ kwargs ['query_params' ] = query_params
746770 kwargs ['selector' ] = True
747771
748772 field = field_class (** kwargs )
0 commit comments