Closes #4817: Standardize device/VM component name field to 64 characters

This commit is contained in:
Jeremy Stretch 2020-07-02 12:08:19 -04:00
parent c5362f5931
commit d03d302eef
5 changed files with 102 additions and 134 deletions

View File

@ -19,6 +19,7 @@ NetBox v2.9 replaces Django's built-in permissions framework with one that suppo
* [#4793](https://github.com/netbox-community/netbox/issues/4793) - Add `description` field to device component templates * [#4793](https://github.com/netbox-community/netbox/issues/4793) - Add `description` field to device component templates
* [#4795](https://github.com/netbox-community/netbox/issues/4795) - Add bulk disconnect capability for console and power ports * [#4795](https://github.com/netbox-community/netbox/issues/4795) - Add bulk disconnect capability for console and power ports
* [#4807](https://github.com/netbox-community/netbox/issues/4807) - Add bulk edit ability for device bay templates * [#4807](https://github.com/netbox-community/netbox/issues/4807) - Add bulk edit ability for device bay templates
* [#4817](https://github.com/netbox-community/netbox/issues/4817) - Standardize device/VM component `name` field to 64 characters
### Configuration Changes ### Configuration Changes

View File

@ -0,0 +1,68 @@
# Generated by Django 3.0.6 on 2020-07-02 16:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dcim', '0111_component_template_description'),
]
operations = [
migrations.AlterField(
model_name='consoleport',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='consoleporttemplate',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='consoleserverport',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='consoleserverporttemplate',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='devicebay',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='devicebaytemplate',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='inventoryitem',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='poweroutlet',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='poweroutlettemplate',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='powerport',
name='name',
field=models.CharField(max_length=64),
),
migrations.AlterField(
model_name='powerporttemplate',
name='name',
field=models.CharField(max_length=64),
),
]

View File

@ -27,6 +27,14 @@ __all__ = (
class ComponentTemplateModel(models.Model): class ComponentTemplateModel(models.Model):
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
label = models.CharField( label = models.CharField(
max_length=64, max_length=64,
blank=True, blank=True,
@ -78,14 +86,6 @@ class ConsolePortTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='consoleport_templates' related_name='consoleport_templates'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
@ -113,14 +113,6 @@ class ConsoleServerPortTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='consoleserverport_templates' related_name='consoleserverport_templates'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
@ -148,14 +140,6 @@ class PowerPortTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='powerport_templates' related_name='powerport_templates'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PowerPortTypeChoices, choices=PowerPortTypeChoices,
@ -197,14 +181,6 @@ class PowerOutletTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='poweroutlet_templates' related_name='poweroutlet_templates'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PowerOutletTypeChoices, choices=PowerOutletTypeChoices,
@ -259,9 +235,6 @@ class InterfaceTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='interface_templates' related_name='interface_templates'
) )
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField( _name = NaturalOrderingField(
target_field='name', target_field='name',
naturalize_function=naturalize_interface, naturalize_function=naturalize_interface,
@ -299,14 +272,6 @@ class FrontPortTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='frontport_templates' related_name='frontport_templates'
) )
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PortTypeChoices choices=PortTypeChoices
@ -367,14 +332,6 @@ class RearPortTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='rearport_templates' related_name='rearport_templates'
) )
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PortTypeChoices choices=PortTypeChoices
@ -406,14 +363,6 @@ class DeviceBayTemplate(ComponentTemplateModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='device_bay_templates' related_name='device_bay_templates'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
class Meta: class Meta:
ordering = ('device_type', '_name') ordering = ('device_type', '_name')

View File

@ -36,6 +36,14 @@ __all__ = (
class ComponentModel(models.Model): class ComponentModel(models.Model):
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
label = models.CharField( label = models.CharField(
max_length=64, max_length=64,
blank=True, blank=True,
@ -243,14 +251,6 @@ class ConsolePort(CableTermination, ComponentModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='consoleports' related_name='consoleports'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
@ -303,14 +303,6 @@ class ConsoleServerPort(CableTermination, ComponentModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='consoleserverports' related_name='consoleserverports'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
@ -356,14 +348,6 @@ class PowerPort(CableTermination, ComponentModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='powerports' related_name='powerports'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PowerPortTypeChoices, choices=PowerPortTypeChoices,
@ -517,14 +501,6 @@ class PowerOutlet(CableTermination, ComponentModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='poweroutlets' related_name='poweroutlets'
) )
name = models.CharField(
max_length=50
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PowerOutletTypeChoices, choices=PowerOutletTypeChoices,
@ -584,15 +560,6 @@ class PowerOutlet(CableTermination, ComponentModel):
# #
class BaseInterface(models.Model): class BaseInterface(models.Model):
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
naturalize_function=naturalize_interface,
max_length=100,
blank=True
)
enabled = models.BooleanField( enabled = models.BooleanField(
default=True default=True
) )
@ -629,6 +596,12 @@ class Interface(CableTermination, ComponentModel, BaseInterface):
null=True, null=True,
blank=True blank=True
) )
_name = NaturalOrderingField(
target_field='name',
naturalize_function=naturalize_interface,
max_length=100,
blank=True
)
_connected_interface = models.OneToOneField( _connected_interface = models.OneToOneField(
to='self', to='self',
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
@ -839,14 +812,6 @@ class FrontPort(CableTermination, ComponentModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='frontports' related_name='frontports'
) )
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PortTypeChoices choices=PortTypeChoices
@ -912,14 +877,6 @@ class RearPort(CableTermination, ComponentModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='rearports' related_name='rearports'
) )
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
type = models.CharField( type = models.CharField(
max_length=50, max_length=50,
choices=PortTypeChoices choices=PortTypeChoices
@ -964,15 +921,6 @@ class DeviceBay(ComponentModel):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='device_bays' related_name='device_bays'
) )
name = models.CharField(
max_length=50,
verbose_name='Name'
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
installed_device = models.OneToOneField( installed_device = models.OneToOneField(
to='dcim.Device', to='dcim.Device',
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
@ -1045,15 +993,6 @@ class InventoryItem(ComponentModel):
blank=True, blank=True,
null=True null=True
) )
name = models.CharField(
max_length=50,
verbose_name='Name'
)
_name = NaturalOrderingField(
target_field='name',
max_length=100,
blank=True
)
manufacturer = models.ForeignKey( manufacturer = models.ForeignKey(
to='dcim.Manufacturer', to='dcim.Manufacturer',
on_delete=models.PROTECT, on_delete=models.PROTECT,

View File

@ -9,7 +9,9 @@ from dcim.choices import InterfaceModeChoices
from dcim.models import BaseInterface, Device from dcim.models import BaseInterface, Device
from extras.models import ConfigContextModel, CustomFieldModel, ObjectChange, TaggedItem from extras.models import ConfigContextModel, CustomFieldModel, ObjectChange, TaggedItem
from extras.utils import extras_features from extras.utils import extras_features
from utilities.fields import NaturalOrderingField
from utilities.models import ChangeLoggedModel from utilities.models import ChangeLoggedModel
from utilities.ordering import naturalize_interface
from utilities.query_functions import CollateAsChar from utilities.query_functions import CollateAsChar
from utilities.querysets import RestrictedQuerySet from utilities.querysets import RestrictedQuerySet
from utilities.utils import serialize_object from utilities.utils import serialize_object
@ -387,6 +389,15 @@ class VMInterface(BaseInterface):
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='interfaces' related_name='interfaces'
) )
name = models.CharField(
max_length=64
)
_name = NaturalOrderingField(
target_field='name',
naturalize_function=naturalize_interface,
max_length=100,
blank=True
)
description = models.CharField( description = models.CharField(
max_length=200, max_length=200,
blank=True blank=True