8356 review changes

This commit is contained in:
Arthur 2023-10-23 08:13:50 -07:00
parent 7e08c3474a
commit 2718700c74
8 changed files with 33 additions and 20 deletions

View File

@ -321,7 +321,7 @@ class VirtualDiskFilterSet(NetBoxModelFilterSet):
class Meta: class Meta:
model = VirtualDisk model = VirtualDisk
fields = ['id', 'name', 'size',] fields = ['id', 'name', 'size']
def search(self, queryset, name, value): def search(self, queryset, name, value):
if not value.strip(): if not value.strip():

View File

@ -229,10 +229,16 @@ class VirtualDiskFilterForm(NetBoxModelFilterSetForm):
fieldsets = ( fieldsets = (
(None, ('q', 'filter_id', 'tag')), (None, ('q', 'filter_id', 'tag')),
(_('Virtual Machine'), ('virtual_machine_id',)), (_('Virtual Machine'), ('virtual_machine_id',)),
(_('Attributes'), ('size',)),
) )
virtual_machine_id = DynamicModelMultipleChoiceField( virtual_machine_id = DynamicModelMultipleChoiceField(
queryset=VirtualMachine.objects.all(), queryset=VirtualMachine.objects.all(),
required=False, required=False,
label=_('Virtual machine') label=_('Virtual machine')
) )
size = forms.IntegerField(
label=_('Size (GB)'),
required=False,
min_value=1
)
tag = TagFilterField(model) tag = TagFilterField(model)

View File

@ -1,7 +1,8 @@
# Generated by Django 4.2.5 on 2023-10-19 21:51 # Generated by Django 4.2.5 on 2023-10-23 15:13
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import django.db.models.functions.text
import taggit.managers import taggit.managers
import utilities.fields import utilities.fields
import utilities.json import utilities.json
@ -40,7 +41,7 @@ class Migration(migrations.Migration):
'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize
), ),
), ),
('size', models.PositiveIntegerField(blank=True, null=True)), ('size', models.PositiveIntegerField()),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
( (
'virtual_machine', 'virtual_machine',
@ -58,4 +59,12 @@ class Migration(migrations.Migration):
}, },
bases=(models.Model, utilities.tracking.TrackingModelMixin), bases=(models.Model, utilities.tracking.TrackingModelMixin),
), ),
migrations.AddConstraint(
model_name='virtualdisk',
constraint=models.UniqueConstraint(
django.db.models.functions.text.Lower('name'),
models.F('virtual_machine'),
name='virtualization_virtualdisk_unique_name_virtual_machine',
),
),
] ]

View File

@ -396,12 +396,16 @@ class VirtualDisk(NetBoxModel, TrackingModelMixin):
) )
size = models.PositiveIntegerField( size = models.PositiveIntegerField(
verbose_name=_('size (GB)'), verbose_name=_('size (GB)'),
blank=True,
null=True,
) )
class Meta: class Meta:
ordering = ('_name', 'pk') # Name may be non-unique ordering = ('_name', 'pk') # Name may be non-unique
constraints = (
models.UniqueConstraint(
Lower('name'), 'virtual_machine',
name='%(app_label)s_%(class)s_unique_name_virtual_machine'
),
)
verbose_name = _('virtual disk') verbose_name = _('virtual disk')
verbose_name_plural = _('virtual disks') verbose_name_plural = _('virtual disks')

View File

@ -191,12 +191,8 @@ class VirtualMachineVirtualDiskTable(VirtualDiskTable):
actions=('edit', 'delete'), actions=('edit', 'delete'),
) )
class Meta(NetBoxTable.Meta): class Meta(VirtualDiskTable.Meta):
model = VirtualDisk
fields = ( fields = (
'pk', 'id', 'name', 'size', 'tags', 'actions', 'pk', 'id', 'name', 'size', 'tags', 'actions',
) )
default_columns = ('pk', 'name', 'size') default_columns = ('pk', 'name', 'size')
row_attrs = {
'data-name': lambda record: record.name,
}

View File

@ -6,7 +6,7 @@ from tenancy.models import Tenant, TenantGroup
from utilities.testing import ChangeLoggedFilterSetTests, create_test_device from utilities.testing import ChangeLoggedFilterSetTests, create_test_device
from virtualization.choices import * from virtualization.choices import *
from virtualization.filtersets import * from virtualization.filtersets import *
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualDisk, VirtualMachine, VMInterface from virtualization.models import *
class ClusterTypeTestCase(TestCase, ChangeLoggedFilterSetTests): class ClusterTypeTestCase(TestCase, ChangeLoggedFilterSetTests):

View File

@ -7,7 +7,7 @@ from dcim.models import DeviceRole, Platform, Site
from ipam.models import VLAN, VRF from ipam.models import VLAN, VRF
from utilities.testing import ViewTestCases, create_tags, create_test_device from utilities.testing import ViewTestCases, create_tags, create_test_device
from virtualization.choices import * from virtualization.choices import *
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualDisk, VirtualMachine, VMInterface from virtualization.models import *
class ClusterGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase): class ClusterGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):

View File

@ -22,13 +22,13 @@ from tenancy.views import ObjectContactsView
from utilities.utils import count_related from utilities.utils import count_related
from utilities.views import ViewTab, register_model_view from utilities.views import ViewTab, register_model_view
from . import filtersets, forms, tables from . import filtersets, forms, tables
from .models import Cluster, ClusterGroup, ClusterType, VirtualDisk, VirtualMachine, VMInterface from .models import *
# #
# Cluster types # Cluster types
# #
class ClusterTypeListView(generic.ObjectListView): class ClusterTypeListView(generic.ObjectListView):
queryset = ClusterType.objects.annotate( queryset = ClusterType.objects.annotate(
cluster_count=count_related(Cluster, 'type') cluster_count=count_related(Cluster, 'type')
@ -391,19 +391,17 @@ class VirtualMachineVirtualDisksView(generic.ObjectChildrenView):
permission='virtualization.view_virtual_disk', permission='virtualization.view_virtual_disk',
weight=500 weight=500
) )
actions = ('add', 'import', 'export', 'bulk_edit', 'bulk_delete', 'bulk_rename') actions = {
action_perms = defaultdict(set, **{
'add': {'add'}, 'add': {'add'},
'import': {'add'}, 'import': {'add'},
'export': {'view'},
'bulk_edit': {'change'}, 'bulk_edit': {'change'},
'bulk_delete': {'delete'}, 'bulk_delete': {'delete'},
'bulk_rename': {'change'}, 'bulk_rename': {'change'},
}) }
def get_children(self, request, parent): def get_children(self, request, parent):
return parent.virtualdisks.restrict(request.user, 'view').prefetch_related( return parent.virtualdisks.restrict(request.user, 'view').prefetch_related('tags',)
'tags',
)
@register_model_view(VirtualMachine, 'configcontext', path='config-context') @register_model_view(VirtualMachine, 'configcontext', path='config-context')