diff --git a/docs/release-notes/version-2.11.md b/docs/release-notes/version-2.11.md index 4daeab8bc..4c12ed40a 100644 --- a/docs/release-notes/version-2.11.md +++ b/docs/release-notes/version-2.11.md @@ -4,6 +4,10 @@ **WARNING:** This is a beta release and is not suitable for production use. It is intended for development and evaluation purposes only. No upgrade path to the final v2.11 release will be provided from this beta, and users should assume that all data entered into the application will be lost. +### Enhancements + +* [#5370](https://github.com/netbox-community/netbox/issues/5370) - Extend custom field support to organizational models + ### Other Changes * [#1638](https://github.com/netbox-community/netbox/issues/1638) - Migrate all primary keys to 64-bit integers diff --git a/netbox/circuits/migrations/0025_standardize_models.py b/netbox/circuits/migrations/0025_standardize_models.py index f5d348ff3..2b1d2664e 100644 --- a/netbox/circuits/migrations/0025_standardize_models.py +++ b/netbox/circuits/migrations/0025_standardize_models.py @@ -1,5 +1,4 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - +import django.core.serializers.json from django.db import migrations, models @@ -10,6 +9,11 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='circuittype', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), migrations.AlterField( model_name='circuit', name='id', diff --git a/netbox/dcim/migrations/0123_standardize_models.py b/netbox/dcim/migrations/0123_standardize_models.py index e9af8c464..4a6fc87b6 100644 --- a/netbox/dcim/migrations/0123_standardize_models.py +++ b/netbox/dcim/migrations/0123_standardize_models.py @@ -1,5 +1,4 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - +import django.core.serializers.json from django.db import migrations, models @@ -10,6 +9,36 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='devicerole', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='manufacturer', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='platform', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='rackgroup', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='rackrole', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='region', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), migrations.AlterField( model_name='cable', name='id', diff --git a/netbox/extras/migrations/0054_standardize_models.py b/netbox/extras/migrations/0054_standardize_models.py index b6c95e77d..c73043345 100644 --- a/netbox/extras/migrations/0054_standardize_models.py +++ b/netbox/extras/migrations/0054_standardize_models.py @@ -1,5 +1,3 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - from django.db import migrations, models diff --git a/netbox/ipam/migrations/0044_standardize_models.py b/netbox/ipam/migrations/0044_standardize_models.py index a4ad77053..2762c9973 100644 --- a/netbox/ipam/migrations/0044_standardize_models.py +++ b/netbox/ipam/migrations/0044_standardize_models.py @@ -1,5 +1,4 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - +import django.core.serializers.json from django.db import migrations, models @@ -10,6 +9,21 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='rir', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='role', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='vlangroup', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), migrations.AlterField( model_name='aggregate', name='id', diff --git a/netbox/netbox/models.py b/netbox/netbox/models.py index ad11dd18f..74d018420 100644 --- a/netbox/netbox/models.py +++ b/netbox/netbox/models.py @@ -130,7 +130,7 @@ class PrimaryModel(ChangeLoggingMixin, CustomFieldsMixin, BigIDModel): abstract = True -class NestedGroupModel(ChangeLoggingMixin, BigIDModel, MPTTModel): +class NestedGroupModel(ChangeLoggingMixin, CustomFieldsMixin, BigIDModel, MPTTModel): """ Base model for objects which are used to form a hierarchy (regions, locations, etc.). These models nest recursively using MPTT. Within each parent, each child instance must have a unique name. @@ -173,7 +173,7 @@ class NestedGroupModel(ChangeLoggingMixin, BigIDModel, MPTTModel): ) -class OrganizationalModel(ChangeLoggingMixin, BigIDModel): +class OrganizationalModel(ChangeLoggingMixin, CustomFieldsMixin, BigIDModel): """ Organizational models are those which are used solely to categorize and qualify other objects, and do not convey any real information about the infrastructure being modeled (for example, functional device roles). Organizational diff --git a/netbox/secrets/migrations/0013_standardize_models.py b/netbox/secrets/migrations/0013_standardize_models.py index ad18536dc..9de8dec95 100644 --- a/netbox/secrets/migrations/0013_standardize_models.py +++ b/netbox/secrets/migrations/0013_standardize_models.py @@ -1,5 +1,4 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - +import django.core.serializers.json from django.db import migrations, models @@ -10,6 +9,11 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='secretrole', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), migrations.AlterField( model_name='secret', name='id', diff --git a/netbox/tenancy/migrations/0012_standardize_models.py b/netbox/tenancy/migrations/0012_standardize_models.py index 6a277fa7c..7ce55cf42 100644 --- a/netbox/tenancy/migrations/0012_standardize_models.py +++ b/netbox/tenancy/migrations/0012_standardize_models.py @@ -1,5 +1,4 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - +import django.core.serializers.json from django.db import migrations, models @@ -10,6 +9,11 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='tenantgroup', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), migrations.AlterField( model_name='tenant', name='id', diff --git a/netbox/users/migrations/0011_standardize_models.py b/netbox/users/migrations/0011_standardize_models.py index 3c514dd2a..08d1103ed 100644 --- a/netbox/users/migrations/0011_standardize_models.py +++ b/netbox/users/migrations/0011_standardize_models.py @@ -1,5 +1,3 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - from django.db import migrations, models diff --git a/netbox/virtualization/migrations/0020_standardize_models.py b/netbox/virtualization/migrations/0020_standardize_models.py index 932403698..8ccb3df0d 100644 --- a/netbox/virtualization/migrations/0020_standardize_models.py +++ b/netbox/virtualization/migrations/0020_standardize_models.py @@ -1,5 +1,4 @@ -# Generated by Django 3.2b1 on 2021-02-26 21:11 - +import django.core.serializers.json from django.db import migrations, models @@ -10,6 +9,16 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='clustergroup', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), + migrations.AddField( + model_name='clustertype', + name='custom_field_data', + field=models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder), + ), migrations.AlterField( model_name='cluster', name='id',