add HardwareModel to the device app

devices like computers etc. usually have a hardware model/type. E.g. Dell
Precision 5530. In order to use the same name consistently we have the option
to select the model name from a drop down.
This commit is contained in:
Andreas Zweili 2020-02-14 20:26:24 +01:00
parent e450ee755f
commit 441fda2e1f
6 changed files with 33 additions and 1 deletions

View File

@ -7,6 +7,7 @@ class ComputersTable(tables.Table):
serialnumber = tables.Column()
owner = tables.Column()
manufacturer = tables.Column()
model = tables.Column()
location = tables.Column()
user = tables.Column('User', linkify=True)
installation_date = tables.Column()

View File

@ -7,6 +7,7 @@ from .models import (
DeviceCategory,
DeviceInNet,
DeviceManufacturer,
HardwareModel,
Warranty,
WarrantyType
)
@ -28,6 +29,14 @@ class DeviceManufacturerAdmin(admin.ModelAdmin):
return {}
class HardwareModelAdmin(admin.ModelAdmin):
def get_model_perms(self, request):
"""
Return empty perms dict thus hiding the model from admin index.
"""
return {}
class DeviceInNetInline(nested_admin.NestedStackedInline):
model = DeviceInNet
extra = 0
@ -47,5 +56,6 @@ admin.site.register(Device)
admin.site.register(DeviceCategory, DeviceCategoryAdmin)
admin.site.register(DeviceInNet)
admin.site.register(DeviceManufacturer, DeviceManufacturerAdmin)
admin.site.register(HardwareModel, HardwareModelAdmin)
admin.site.register(Warranty)
admin.site.register(WarrantyType, WarrantyTypeAdmin)

View File

@ -5,4 +5,5 @@ from .device import (
DeviceCategory,
DeviceInNet,
DeviceManufacturer,
HardwareModel,
)

View File

@ -17,16 +17,28 @@ class DeviceCategory(Category):
verbose_name_plural = "Device Categories"
class HardwareModel(models.Model):
name = models.CharField(max_length=50)
manufacturer = models.ForeignKey(DeviceManufacturer,
on_delete=models.CASCADE)
def __str__(self):
return self.name
class Device(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(blank=True)
serialnumber = models.CharField(max_length=50, blank=True)
category = models.ForeignKey(DeviceCategory, on_delete=models.SET_NULL,
null=True, blank=True)
owner = models.ForeignKey(Owner, on_delete=models.SET_NULL, null=True, blank=True)
owner = models.ForeignKey(Owner, on_delete=models.SET_NULL, null=True,
blank=True)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
manufacturer = models.ForeignKey(DeviceManufacturer, models.SET_NULL,
null=True, blank=True)
model = models.ForeignKey(HardwareModel, models.SET_NULL, null=True,
blank=True)
location = models.ForeignKey(Location, models.SET_NULL, null=True,
blank=True)
user = models.ForeignKey(User, models.SET_NULL, null=True, blank=True)

View File

@ -28,6 +28,11 @@
<th><b>Manufacturer:</b></th>
<td>{{ device.manufacturer }}</td>
</tr>
<tr>
<th><b>Model:</b></th>
<td>{{ device.model }}</td>
</tr>
<tr>
<th><b>Location:</b></th>
<td>{{ device.location }}</td>

View File

@ -16,6 +16,7 @@ def test_device_detail_view_not_logged_in():
def test_device_detail_view(create_admin_user):
fixture = create_admin_user()
mixer.blend('devices.DeviceCategory')
mixer.blend('devices.HardwareModel')
mixer.blend('customers.Owner')
mixer.blend('customers.Location')
device = mixer.blend('devices.Device',
@ -23,6 +24,7 @@ def test_device_detail_view(create_admin_user):
owner=mixer.SELECT,
category=mixer.SELECT,
manufacturer=mixer.SELECT,
hardware_model=mixer.SELECT,
location=mixer.SELECT)
client = Client()
client.login(username="novartis-admin", password="password")
@ -34,6 +36,7 @@ def test_device_detail_view(create_admin_user):
and helper.in_content(response, device.owner)
and helper.in_content(response, device.customer)
and helper.in_content(response, device.manufacturer)
and helper.in_content(response, device.hardware_model)
and helper.in_content(response, device.location))