2929from utilities .templatetags .builtins .filters import linkify , render_markdown
3030from netbox .tables .columns import BooleanColumn
3131
32+ from netbox_custom_objects .choices import ObjectFieldOnDeleteChoices
3233from netbox_custom_objects .constants import APP_LABEL
3334from netbox_custom_objects .utilities import extract_cot_id_from_model_name , generate_model
3435
@@ -486,6 +487,13 @@ def render_table_column(self, value):
486487 return ", " .join (value )
487488
488489
490+ _ON_DELETE_MAP = {
491+ ObjectFieldOnDeleteChoices .CASCADE : models .CASCADE ,
492+ ObjectFieldOnDeleteChoices .SET_NULL : models .SET_NULL ,
493+ ObjectFieldOnDeleteChoices .PROTECT : models .PROTECT ,
494+ }
495+
496+
489497class ObjectFieldType (FieldType ):
490498 def get_model_field (self , field , ** kwargs ):
491499 content_type = self ._get_related_content_type (field )
@@ -495,6 +503,11 @@ def get_model_field(self, field, **kwargs):
495503 field_kwargs = {k : v for k , v in kwargs .items () if not k .startswith ('_' )}
496504 field_kwargs .update ({"default" : field .default , "unique" : field .unique })
497505
506+ on_delete = _ON_DELETE_MAP .get (
507+ getattr (field , 'on_delete_behavior' , None ) or ObjectFieldOnDeleteChoices .SET_NULL ,
508+ models .SET_NULL ,
509+ )
510+
498511 # Handle self-referential fields by using string references
499512 if content_type .app_label == APP_LABEL :
500513 from netbox_custom_objects .models import CustomObjectType
@@ -522,7 +535,7 @@ def get_model_field(self, field, **kwargs):
522535 model_name ,
523536 null = True ,
524537 blank = True ,
525- on_delete = models . SET_NULL ,
538+ on_delete = on_delete ,
526539 related_name = related_name ,
527540 ** field_kwargs
528541 )
@@ -542,7 +555,7 @@ def get_model_field(self, field, **kwargs):
542555 table_model_name = field .custom_object_type .get_table_model_name (field .custom_object_type .id ).lower ()
543556 related_name = f"{ table_model_name } _{ field .name } _set"
544557 f = models .ForeignKey (
545- model , null = True , blank = True , on_delete = models . SET_NULL , related_name = related_name , ** field_kwargs
558+ model , null = True , blank = True , on_delete = on_delete , related_name = related_name , ** field_kwargs
546559 )
547560
548561 return f
0 commit comments