diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index 7dd745513..69f25ac43 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -20,6 +20,7 @@ from utilities.api import ( ChoiceField, ContentTypeField, get_serializer_for_model, SerializerNotFound, SerializedPKRelatedField, ValidatedModelSerializer, ) +from utilities.utils import model_names_to_filter_dict from .nested_serializers import * @@ -29,7 +30,7 @@ from .nested_serializers import * class GraphSerializer(ValidatedModelSerializer): type = ContentTypeField( - queryset=ContentType.objects.all() + queryset=ContentType.objects.filter(**model_names_to_filter_dict(GRAPH_MODELS)), ) class Meta: diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 06beb9081..04d065da7 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -42,6 +42,14 @@ CUSTOMLINK_MODELS = [ 'virtualization.virtualmachine', ] +# Models which can have Graphs associated with them +GRAPH_MODELS = ( + 'circuits.provider', + 'dcim.device', + 'dcim.interface', + 'dcim.site', +) + # Models which support export templates EXPORTTEMPLATE_MODELS = [ 'circuits.circuit', diff --git a/netbox/extras/migrations/0033_graph_type_template_language.py b/netbox/extras/migrations/0033_graph_type_template_language.py index f5e4034cc..672bbdbd8 100644 --- a/netbox/extras/migrations/0033_graph_type_template_language.py +++ b/netbox/extras/migrations/0033_graph_type_template_language.py @@ -38,7 +38,7 @@ class Migration(migrations.Migration): model_name='graph', name='type', field=models.ForeignKey( - limit_choices_to={'model__in': ['device', 'interface', 'provider', 'site']}, + limit_choices_to={'model__in': ['provider', 'device', 'interface', 'site']}, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType' ), diff --git a/netbox/extras/models.py b/netbox/extras/models.py index 78ef0129a..46d5a54d8 100644 --- a/netbox/extras/models.py +++ b/netbox/extras/models.py @@ -410,9 +410,7 @@ class Graph(models.Model): type = models.ForeignKey( to=ContentType, on_delete=models.CASCADE, - limit_choices_to={ - 'model__in': ['device', 'interface', 'provider', 'site'] - } + limit_choices_to=model_names_to_filter_dict(GRAPH_MODELS) ) weight = models.PositiveSmallIntegerField( default=1000