feat(itam): Change model to inherit from Centurion
for DeviceSoftware model
ref:#817 #802
This commit is contained in:
@ -0,0 +1,101 @@
|
||||
# Generated by Django 5.1.9 on 2025-06-11 09:15
|
||||
|
||||
import access.models.tenancy_abstract
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("access", "0016_remove_tenant_slug_alter_tenant_manager_and_more"),
|
||||
("itam", "0017_remove_deviceoperatingsystem_is_global_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="devicesoftware",
|
||||
name="is_global",
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="devicesoftware",
|
||||
name="action",
|
||||
field=models.IntegerField(
|
||||
blank=True,
|
||||
choices=[(1, "Install"), (0, "Remove")],
|
||||
help_text="Action to perform",
|
||||
null=True,
|
||||
verbose_name="Action",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="devicesoftware",
|
||||
name="id",
|
||||
field=models.AutoField(
|
||||
help_text="ID of the item",
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
unique=True,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="devicesoftware",
|
||||
name="installedversion",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
help_text="Version that is installed",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
related_name="installedversion",
|
||||
to="itam.softwareversion",
|
||||
verbose_name="Installed Version",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="devicesoftware",
|
||||
name="model_notes",
|
||||
field=models.TextField(
|
||||
blank=True,
|
||||
help_text="Tid bits of information",
|
||||
null=True,
|
||||
verbose_name="Notes",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="devicesoftware",
|
||||
name="organization",
|
||||
field=models.ForeignKey(
|
||||
help_text="Tenant this belongs to",
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="+",
|
||||
to="access.tenant",
|
||||
validators=[
|
||||
access.models.tenancy_abstract.TenancyAbstractModel.validatate_organization_exists
|
||||
],
|
||||
verbose_name="Tenant",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="devicesoftware",
|
||||
name="software",
|
||||
field=models.ForeignKey(
|
||||
help_text="Software Name",
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
to="itam.software",
|
||||
verbose_name="Software",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="devicesoftware",
|
||||
name="version",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
help_text="Version to install",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
to="itam.softwareversion",
|
||||
verbose_name="Desired Version",
|
||||
),
|
||||
),
|
||||
]
|
@ -14,11 +14,8 @@ from access.fields import AutoLastModifiedField
|
||||
from centurion.helpers.merge_software import merge_software
|
||||
|
||||
from core.classes.icon import Icon
|
||||
from core.lib.feature_not_used import FeatureNotUsed
|
||||
from core.mixins.history_save import SaveHistory
|
||||
from core.models.centurion import CenturionModel
|
||||
|
||||
from itam.models.device_common import DeviceCommonFields
|
||||
from itam.models.device_models import DeviceModel
|
||||
from itam.models.software import Software, SoftwareVersion
|
||||
from itam.models.operating_system import OperatingSystemVersion
|
||||
@ -537,9 +534,16 @@ class Device(
|
||||
|
||||
|
||||
|
||||
class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
||||
class DeviceSoftware(
|
||||
CenturionModel,
|
||||
):
|
||||
""" A way for the device owner to configure software to install/remove """
|
||||
|
||||
_audit_enabled = False
|
||||
|
||||
_notes_enabled = False
|
||||
|
||||
|
||||
class Meta:
|
||||
ordering = [
|
||||
'-action',
|
||||
@ -559,37 +563,35 @@ class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
||||
|
||||
device = models.ForeignKey(
|
||||
Device,
|
||||
blank= False,
|
||||
blank = False,
|
||||
help_text = 'Device this software is on',
|
||||
on_delete=models.CASCADE,
|
||||
on_delete = models.CASCADE,
|
||||
null = False,
|
||||
verbose_name = 'Device'
|
||||
)
|
||||
|
||||
software = models.ForeignKey(
|
||||
Software,
|
||||
blank= False,
|
||||
blank = False,
|
||||
help_text = 'Software Name',
|
||||
null = False,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete = models.PROTECT,
|
||||
verbose_name = 'Software'
|
||||
)
|
||||
|
||||
action = models.IntegerField(
|
||||
blank = True,
|
||||
choices=Actions,
|
||||
default=None,
|
||||
choices = Actions,
|
||||
help_text = 'Action to perform',
|
||||
null=True,
|
||||
null = True,
|
||||
verbose_name = 'Action',
|
||||
)
|
||||
|
||||
version = models.ForeignKey(
|
||||
SoftwareVersion,
|
||||
blank= True,
|
||||
default = None,
|
||||
blank = True,
|
||||
help_text = 'Version to install',
|
||||
on_delete=models.CASCADE,
|
||||
on_delete = models.PROTECT,
|
||||
null = True,
|
||||
verbose_name = 'Desired Version'
|
||||
)
|
||||
@ -597,11 +599,10 @@ class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
||||
|
||||
installedversion = models.ForeignKey(
|
||||
SoftwareVersion,
|
||||
blank= True,
|
||||
default = None,
|
||||
blank = True,
|
||||
help_text = 'Version that is installed',
|
||||
null = True,
|
||||
on_delete=models.CASCADE,
|
||||
on_delete = models.PROTECT,
|
||||
related_name = 'installedversion',
|
||||
verbose_name = 'Installed Version'
|
||||
)
|
||||
@ -651,39 +652,24 @@ class DeviceSoftware(DeviceCommonFields, SaveHistory):
|
||||
)
|
||||
|
||||
|
||||
def get_url_kwargs(self) -> dict:
|
||||
def get_url_kwargs(self, many = False) -> dict:
|
||||
|
||||
return {
|
||||
kwargs = super().get_url_kwargs( many = many )
|
||||
|
||||
kwargs.update({
|
||||
'device_id': self.device.id,
|
||||
'pk': self.id
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
def get_url_kwargs_notes(self):
|
||||
|
||||
return FeatureNotUsed
|
||||
return kwargs
|
||||
|
||||
|
||||
@property
|
||||
def parent_object(self):
|
||||
""" Fetch the parent object """
|
||||
|
||||
|
||||
return self.device
|
||||
|
||||
|
||||
def save_history(self, before: dict, after: dict) -> bool:
|
||||
|
||||
from itam.models.device_software_history import DeviceSoftwareHistory
|
||||
|
||||
history = super().save_history(
|
||||
before = before,
|
||||
after = after,
|
||||
history_model = DeviceSoftwareHistory,
|
||||
)
|
||||
|
||||
|
||||
return history
|
||||
|
||||
|
||||
class DeviceOperatingSystem(
|
||||
CenturionModel,
|
||||
|
@ -1,39 +0,0 @@
|
||||
from django.db import models
|
||||
|
||||
from access.fields import *
|
||||
from access.models.tenancy import TenancyObject
|
||||
|
||||
|
||||
class DeviceCommonFields(TenancyObject, models.Model):
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
id = models.AutoField(
|
||||
blank=False,
|
||||
help_text = 'ID of this item',
|
||||
primary_key=True,
|
||||
unique=True,
|
||||
verbose_name = 'ID'
|
||||
)
|
||||
|
||||
created = AutoCreatedField()
|
||||
|
||||
modified = AutoLastModifiedField()
|
||||
|
||||
|
||||
|
||||
class DeviceCommonFieldsName(DeviceCommonFields):
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
name = models.CharField(
|
||||
blank = False,
|
||||
help_text = 'The items name',
|
||||
max_length = 50,
|
||||
unique = True,
|
||||
verbose_name = 'Name'
|
||||
)
|
||||
|
||||
slug = AutoSlugField()
|
Reference in New Issue
Block a user