mirror of
https://github.com/Nebucatnetzer/network_inventory.git
synced 2024-06-27 03:35:11 +02:00
remove the ConnectedDevice model
This commit is contained in:
parent
02b8657ba2
commit
17053f586b
|
@ -5,13 +5,13 @@ from softwares.models import Software
|
||||||
from softwares.models import SoftwareArchitecture
|
from softwares.models import SoftwareArchitecture
|
||||||
|
|
||||||
from .cpu import Cpu
|
from .cpu import Cpu
|
||||||
from devices.models import ConnectedDevice
|
from devices.models import Device
|
||||||
from .disk import Disk
|
from .disk import Disk
|
||||||
from .gpu import Gpu
|
from .gpu import Gpu
|
||||||
from .ram import Ram
|
from .ram import Ram
|
||||||
|
|
||||||
|
|
||||||
class Computer(ConnectedDevice):
|
class Computer(Device):
|
||||||
os = models.ForeignKey(OperatingSystem, models.SET_NULL, blank=True,
|
os = models.ForeignKey(OperatingSystem, models.SET_NULL, blank=True,
|
||||||
null=True, verbose_name='OS')
|
null=True, verbose_name='OS')
|
||||||
cpu = models.ManyToManyField(Cpu, through='ComputerCpuRelation')
|
cpu = models.ManyToManyField(Cpu, through='ComputerCpuRelation')
|
||||||
|
|
|
@ -15,10 +15,6 @@ class CustomersTable(CoreTable):
|
||||||
text='Computers',
|
text='Computers',
|
||||||
args=[A('pk')],
|
args=[A('pk')],
|
||||||
orderable=False)
|
orderable=False)
|
||||||
connected_devices = tables.LinkColumn('connected_devices',
|
|
||||||
text='Connected Devices',
|
|
||||||
args=[A('pk')],
|
|
||||||
orderable=False)
|
|
||||||
devices = tables.LinkColumn('devices',
|
devices = tables.LinkColumn('devices',
|
||||||
text='Devices',
|
text='Devices',
|
||||||
args=[A('pk')],
|
args=[A('pk')],
|
||||||
|
|
|
@ -42,10 +42,6 @@ def test_customer_list_view(create_admin_user):
|
||||||
"/customer/"
|
"/customer/"
|
||||||
+ str(customer.id)
|
+ str(customer.id)
|
||||||
+ "/computers/")
|
+ "/computers/")
|
||||||
and helper.in_content(response,
|
|
||||||
"/customer/"
|
|
||||||
+ str(customer.id)
|
|
||||||
+ "/connected_devices/")
|
|
||||||
and helper.in_content(response,
|
and helper.in_content(response,
|
||||||
"/customer/"
|
"/customer/"
|
||||||
+ str(customer.id)
|
+ str(customer.id)
|
||||||
|
@ -82,10 +78,6 @@ def test_customer_list_view_multiple_customers(create_admin_user):
|
||||||
"/customer/"
|
"/customer/"
|
||||||
+ str(customer1.id)
|
+ str(customer1.id)
|
||||||
+ "/computers/")
|
+ "/computers/")
|
||||||
and helper.in_content(response,
|
|
||||||
"/customer/"
|
|
||||||
+ str(customer1.id)
|
|
||||||
+ "/connected_devices/")
|
|
||||||
and helper.in_content(response,
|
and helper.in_content(response,
|
||||||
"/customer/"
|
"/customer/"
|
||||||
+ str(customer1.id)
|
+ str(customer1.id)
|
||||||
|
@ -111,10 +103,6 @@ def test_customer_list_view_multiple_customers(create_admin_user):
|
||||||
"/customer/"
|
"/customer/"
|
||||||
+ str(customer2.id)
|
+ str(customer2.id)
|
||||||
+ "/computers/")
|
+ "/computers/")
|
||||||
and helper.in_content(response,
|
|
||||||
"/customer/"
|
|
||||||
+ str(customer2.id)
|
|
||||||
+ "/connected_devices/")
|
|
||||||
and helper.in_content(response,
|
and helper.in_content(response,
|
||||||
"/customer/"
|
"/customer/"
|
||||||
+ str(customer2.id)
|
+ str(customer2.id)
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.contrib import admin
|
||||||
import nested_admin
|
import nested_admin
|
||||||
|
|
||||||
from .models import (
|
from .models import (
|
||||||
ConnectedDevice,
|
|
||||||
Device,
|
Device,
|
||||||
DeviceCategory,
|
DeviceCategory,
|
||||||
DeviceInNet,
|
DeviceInNet,
|
||||||
|
@ -51,12 +50,11 @@ class WarrantyTypeAdmin(admin.ModelAdmin):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
class ConnectedDeviceAdmin(nested_admin.NestedModelAdmin):
|
class DeviceAdmin(nested_admin.NestedModelAdmin):
|
||||||
inlines = (DeviceInNetInline, )
|
inlines = (DeviceInNetInline, )
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(ConnectedDevice, ConnectedDeviceAdmin)
|
admin.site.register(Device, DeviceAdmin)
|
||||||
admin.site.register(Device)
|
|
||||||
admin.site.register(DeviceCategory, DeviceCategoryAdmin)
|
admin.site.register(DeviceCategory, DeviceCategoryAdmin)
|
||||||
admin.site.register(DeviceInNet)
|
admin.site.register(DeviceInNet)
|
||||||
admin.site.register(DeviceManufacturer, DeviceManufacturerAdmin)
|
admin.site.register(DeviceManufacturer, DeviceManufacturerAdmin)
|
||||||
|
|
|
@ -2,7 +2,6 @@ from django.http import HttpResponseForbidden
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from .models import Device
|
from .models import Device
|
||||||
from .models import ConnectedDevice
|
|
||||||
|
|
||||||
|
|
||||||
def device_view_permission(old_function):
|
def device_view_permission(old_function):
|
||||||
|
@ -16,16 +15,3 @@ def device_view_permission(old_function):
|
||||||
"You're not allowed to access this device."
|
"You're not allowed to access this device."
|
||||||
)
|
)
|
||||||
return new_function
|
return new_function
|
||||||
|
|
||||||
|
|
||||||
def connected_device_view_permission(old_function):
|
|
||||||
def new_function(request, pk, *args, **kwargs):
|
|
||||||
device = get_object_or_404(ConnectedDevice, pk=pk)
|
|
||||||
user = request.user
|
|
||||||
if user.has_perm('customers.view_customer', device.customer):
|
|
||||||
return old_function(request, pk)
|
|
||||||
else:
|
|
||||||
return HttpResponseForbidden(
|
|
||||||
"You're not allowed to access this device."
|
|
||||||
)
|
|
||||||
return new_function
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ class DeviceUpdateForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Device
|
model = Device
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
exclude = ('net',)
|
||||||
|
|
||||||
|
|
||||||
class WarrantyCreateForm(forms.ModelForm):
|
class WarrantyCreateForm(forms.ModelForm):
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
from .warranty import Warranty, WarrantyType
|
from .warranty import Warranty, WarrantyType
|
||||||
from .device import (
|
from .device import (
|
||||||
ConnectedDevice,
|
|
||||||
Device,
|
Device,
|
||||||
DeviceCategory,
|
DeviceCategory,
|
||||||
DeviceInNet,
|
DeviceInNet,
|
||||||
|
|
|
@ -57,16 +57,6 @@ class Device(models.Model):
|
||||||
null=True,
|
null=True,
|
||||||
blank=True)
|
blank=True)
|
||||||
installation_date = models.DateField(null=True, blank=True)
|
installation_date = models.DateField(null=True, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
from django.urls import reverse
|
|
||||||
return reverse('device', args=[str(self.id)])
|
|
||||||
|
|
||||||
|
|
||||||
class ConnectedDevice(Device):
|
|
||||||
net = models.ManyToManyField(Net, through='DeviceInNet')
|
net = models.ManyToManyField(Net, through='DeviceInNet')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -82,16 +72,16 @@ class ConnectedDevice(Device):
|
||||||
nets.append(ip_addresses)
|
nets.append(ip_addresses)
|
||||||
return nets
|
return nets
|
||||||
|
|
||||||
class Meta:
|
def __str__(self):
|
||||||
verbose_name_plural = "Connected Devices"
|
return self.name
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
return reverse('connected_device', args=[str(self.id)])
|
return reverse('device', args=[str(self.id)])
|
||||||
|
|
||||||
|
|
||||||
class DeviceInNet(models.Model):
|
class DeviceInNet(models.Model):
|
||||||
device = models.ForeignKey(ConnectedDevice, on_delete=models.CASCADE)
|
device = models.ForeignKey(Device, on_delete=models.CASCADE)
|
||||||
net = models.ForeignKey(Net, on_delete=models.CASCADE)
|
net = models.ForeignKey(Net, on_delete=models.CASCADE)
|
||||||
ip = models.GenericIPAddressField(verbose_name="IP", blank=True, null=True)
|
ip = models.GenericIPAddressField(verbose_name="IP", blank=True, null=True)
|
||||||
nic = models.CharField(max_length=50, blank=True, verbose_name="NIC")
|
nic = models.CharField(max_length=50, blank=True, verbose_name="NIC")
|
||||||
|
|
|
@ -4,7 +4,6 @@ import django_tables2 as tables
|
||||||
|
|
||||||
from core.tables import CoreTable
|
from core.tables import CoreTable
|
||||||
|
|
||||||
from .models import ConnectedDevice
|
|
||||||
from .models import Device
|
from .models import Device
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,14 +15,6 @@ class DevicesTable(CoreTable):
|
||||||
model = Device
|
model = Device
|
||||||
|
|
||||||
|
|
||||||
class ConnectedDevicesTable(CoreTable):
|
|
||||||
id = tables.Column(visible=False)
|
|
||||||
name = tables.Column('ConnectedDevice', linkify=True)
|
|
||||||
|
|
||||||
class Meta(CoreTable.Meta):
|
|
||||||
model = ConnectedDevice
|
|
||||||
|
|
||||||
|
|
||||||
class WarrantiesTable(CoreTable):
|
class WarrantiesTable(CoreTable):
|
||||||
customer = tables.Column(linkify=True, orderable=False)
|
customer = tables.Column(linkify=True, orderable=False)
|
||||||
device = tables.Column(linkify=True)
|
device = tables.Column(linkify=True)
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
{% extends "core/base.html" %}
|
|
||||||
{% load render_table from django_tables2 %}
|
|
||||||
{% block section_title %}List of Connected Devices{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="row mb-3">
|
|
||||||
<div class="col">
|
|
||||||
<form action="{% url 'device_create' pk %}">{% csrf_token %}
|
|
||||||
<input type="submit" value="Add Device" class="btn btn-primary">
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
{% render_table devices %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -1,10 +0,0 @@
|
||||||
import pytest
|
|
||||||
from mixer.backend.django import mixer
|
|
||||||
|
|
||||||
pytestmark = pytest.mark.django_db
|
|
||||||
|
|
||||||
|
|
||||||
def test_device_reverse_url():
|
|
||||||
device = mixer.blend('devices.ConnectedDevice')
|
|
||||||
assert (device.get_absolute_url()
|
|
||||||
== "/connected_device/" + str(device.id) + "/")
|
|
|
@ -9,35 +9,9 @@ from nets.models import IpStatus
|
||||||
pytestmark = pytest.mark.django_db
|
pytestmark = pytest.mark.django_db
|
||||||
|
|
||||||
|
|
||||||
def test_connected_device_detail_view_not_logged_in():
|
def test_device_detail_view_net_relation(create_admin_user):
|
||||||
response = Client().get('/connected_device/1/')
|
|
||||||
assert response.status_code == 302 and 'login' in response.url
|
|
||||||
|
|
||||||
|
|
||||||
def test_connected_device_detail_view_not_found(create_admin_user):
|
|
||||||
create_admin_user()
|
create_admin_user()
|
||||||
client = Client()
|
device = mixer.blend('devices.Device', customer=mixer.SELECT)
|
||||||
client.login(username="pharma-admin", password="password")
|
|
||||||
response = client.get('/connected_device/100/')
|
|
||||||
assert response.status_code == 404
|
|
||||||
|
|
||||||
|
|
||||||
def test_connected_device_detail_view_no_permission(create_admin_user):
|
|
||||||
create_admin_user()
|
|
||||||
customer = mixer.blend('customers.Customer')
|
|
||||||
connected_device = mixer.blend('devices.ConnectedDevice',
|
|
||||||
customer=customer)
|
|
||||||
client = Client()
|
|
||||||
client.login(username="pharma-admin", password="password")
|
|
||||||
response = client.get('/connected_device/'
|
|
||||||
+ str(connected_device.id)
|
|
||||||
+ '/')
|
|
||||||
assert response.status_code == 403
|
|
||||||
|
|
||||||
|
|
||||||
def test_connected_device_detail_view_net_relation(create_admin_user):
|
|
||||||
create_admin_user()
|
|
||||||
device = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
|
|
||||||
net1 = mixer.blend('nets.Net', customer=mixer.SELECT)
|
net1 = mixer.blend('nets.Net', customer=mixer.SELECT)
|
||||||
net2 = mixer.blend('nets.Net', customer=mixer.SELECT)
|
net2 = mixer.blend('nets.Net', customer=mixer.SELECT)
|
||||||
device_in_net1 = mixer.blend('devices.DeviceInNet',
|
device_in_net1 = mixer.blend('devices.DeviceInNet',
|
||||||
|
@ -50,15 +24,15 @@ def test_connected_device_detail_view_net_relation(create_admin_user):
|
||||||
ip="10.8.89.100")
|
ip="10.8.89.100")
|
||||||
client = Client()
|
client = Client()
|
||||||
client.login(username="pharma-admin", password="password")
|
client.login(username="pharma-admin", password="password")
|
||||||
response = client.get('/connected_device/' + str(device.id) + '/')
|
response = client.get('/device/' + str(device.id) + '/')
|
||||||
assert (response.status_code == 200
|
assert (response.status_code == 200
|
||||||
and helper.in_content(response, device_in_net1.ip)
|
and helper.in_content(response, device_in_net1.ip)
|
||||||
and helper.in_content(response, device_in_net2.ip))
|
and helper.in_content(response, device_in_net2.ip))
|
||||||
|
|
||||||
|
|
||||||
def test_connected_device_detail_view_net_dhcp_relation(create_admin_user):
|
def test_device_detail_view_net_dhcp_relation(create_admin_user):
|
||||||
create_admin_user()
|
create_admin_user()
|
||||||
device = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
|
device = mixer.blend('devices.Device', customer=mixer.SELECT)
|
||||||
net1 = mixer.blend('nets.Net', customer=mixer.SELECT)
|
net1 = mixer.blend('nets.Net', customer=mixer.SELECT)
|
||||||
ip_status = IpStatus.objects.filter(name="Dynamic")
|
ip_status = IpStatus.objects.filter(name="Dynamic")
|
||||||
device_in_net1 = mixer.blend('devices.DeviceInNet',
|
device_in_net1 = mixer.blend('devices.DeviceInNet',
|
||||||
|
@ -68,6 +42,6 @@ def test_connected_device_detail_view_net_dhcp_relation(create_admin_user):
|
||||||
ip="")
|
ip="")
|
||||||
client = Client()
|
client = Client()
|
||||||
client.login(username="pharma-admin", password="password")
|
client.login(username="pharma-admin", password="password")
|
||||||
response = client.get('/connected_device/' + str(device.id) + '/')
|
response = client.get('/device/' + str(device.id) + '/')
|
||||||
assert (response.status_code == 200
|
assert (response.status_code == 200
|
||||||
and helper.in_content(response, device_in_net1.ip_status))
|
and helper.in_content(response, device_in_net1.ip_status))
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
import pytest
|
|
||||||
|
|
||||||
from django.test import Client
|
|
||||||
from mixer.backend.django import mixer
|
|
||||||
|
|
||||||
from core.tests import helper
|
|
||||||
from customers.models import Customer
|
|
||||||
|
|
||||||
pytestmark = pytest.mark.django_db
|
|
||||||
|
|
||||||
|
|
||||||
def test_customer_device_table_not_logged_in():
|
|
||||||
response = Client().get('/customer/1/devices/')
|
|
||||||
assert response.status_code == 302 and 'login' in response.url
|
|
||||||
|
|
||||||
|
|
||||||
def test_customer_device_table(create_admin_user):
|
|
||||||
fixture = create_admin_user()
|
|
||||||
customer = fixture['customer']
|
|
||||||
client = Client()
|
|
||||||
client.login(username="pharma-admin", password="password")
|
|
||||||
device = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
|
|
||||||
response = client.get('/customer/'
|
|
||||||
+ str(customer.id)
|
|
||||||
+ '/connected_devices/')
|
|
||||||
assert (response.status_code == 200
|
|
||||||
and helper.in_content(response, device))
|
|
||||||
|
|
||||||
|
|
||||||
def test_customer_device_table_no_device(create_admin_user):
|
|
||||||
fixture = create_admin_user()
|
|
||||||
customer = fixture['customer']
|
|
||||||
client = Client()
|
|
||||||
client.login(username="pharma-admin", password="password")
|
|
||||||
response = client.get('/customer/'
|
|
||||||
+ str(customer.id)
|
|
||||||
+ '/connected_devices/')
|
|
||||||
assert (response.status_code == 200
|
|
||||||
and helper.not_in_content(response, "Pharma Corp. PC"))
|
|
||||||
|
|
||||||
|
|
||||||
def test_customer_device_table_no_permission(create_admin_user):
|
|
||||||
create_admin_user()
|
|
||||||
customer = Customer.objects.create(name='Water Corp.')
|
|
||||||
client = Client()
|
|
||||||
client.login(username="pharma-admin", password="password")
|
|
||||||
mixer.blend('devices.ConnectedDevice', customer=customer)
|
|
||||||
response = client.get('/customer/'
|
|
||||||
+ str(customer.id)
|
|
||||||
+ '/connected_devices/')
|
|
||||||
assert response.status_code == 403
|
|
||||||
|
|
||||||
|
|
||||||
def test_customer_device_table_multiple_devices(create_admin_user):
|
|
||||||
fixture = create_admin_user()
|
|
||||||
customer = fixture['customer']
|
|
||||||
client = Client()
|
|
||||||
client.login(username="pharma-admin", password="password")
|
|
||||||
device1 = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
|
|
||||||
device2 = mixer.blend('devices.ConnectedDevice', customer=mixer.SELECT)
|
|
||||||
response = client.get('/customer/'
|
|
||||||
+ str(customer.id)
|
|
||||||
+ '/connected_devices/')
|
|
||||||
assert (response.status_code == 200
|
|
||||||
and helper.in_content(response, device1)
|
|
||||||
and helper.in_content(response, device2))
|
|
|
@ -4,13 +4,8 @@ from . import views
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('connected_device/<int:pk>/', views.connected_device_detail_view,
|
|
||||||
name='connected_device'),
|
|
||||||
path('customer/<int:pk>/devices/', views.devices_table_view,
|
path('customer/<int:pk>/devices/', views.devices_table_view,
|
||||||
name='devices'),
|
name='devices'),
|
||||||
path('customer/<int:pk>/connected_devices/',
|
|
||||||
views.connected_devices_table_view,
|
|
||||||
name='connected_devices'),
|
|
||||||
path('device/<int:pk>/', views.device_detail_view, name='device'),
|
path('device/<int:pk>/', views.device_detail_view, name='device'),
|
||||||
path('customer/<int:pk>/create/device/',
|
path('customer/<int:pk>/create/device/',
|
||||||
views.DeviceCreateFromCustomerView.as_view(),
|
views.DeviceCreateFromCustomerView.as_view(),
|
||||||
|
|
|
@ -14,7 +14,6 @@ from customers.models import Customer
|
||||||
from core.utils import get_objects
|
from core.utils import get_objects
|
||||||
|
|
||||||
from .decorators import device_view_permission
|
from .decorators import device_view_permission
|
||||||
from .decorators import connected_device_view_permission
|
|
||||||
|
|
||||||
from .forms import DeviceCreateForm
|
from .forms import DeviceCreateForm
|
||||||
from .forms import DeviceInNetCreateForm
|
from .forms import DeviceInNetCreateForm
|
||||||
|
@ -22,12 +21,10 @@ from .forms import DeviceUpdateForm
|
||||||
from .forms import WarrantyCreateForm
|
from .forms import WarrantyCreateForm
|
||||||
from .forms import WarrantyUpdateForm
|
from .forms import WarrantyUpdateForm
|
||||||
|
|
||||||
from .models import ConnectedDevice
|
|
||||||
from .models import Device
|
from .models import Device
|
||||||
from .models import DeviceInNet
|
from .models import DeviceInNet
|
||||||
from .models import Warranty
|
from .models import Warranty
|
||||||
|
|
||||||
from .tables import ConnectedDevicesTable
|
|
||||||
from .tables import DevicesTable
|
from .tables import DevicesTable
|
||||||
from .tables import WarrantiesTable
|
from .tables import WarrantiesTable
|
||||||
|
|
||||||
|
@ -55,29 +52,6 @@ def devices_table_view(request, pk):
|
||||||
'pk': pk})
|
'pk': pk})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
|
||||||
@connected_device_view_permission
|
|
||||||
def connected_device_detail_view(request, pk):
|
|
||||||
device = get_object_or_404(ConnectedDevice, pk=pk)
|
|
||||||
warranty_relations = Warranty.objects.filter(device=pk)
|
|
||||||
return render(request,
|
|
||||||
'devices/device_details.html',
|
|
||||||
{'device': device,
|
|
||||||
'warranty_relations': warranty_relations,
|
|
||||||
'pk': pk})
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
|
||||||
@customer_view_permission
|
|
||||||
def connected_devices_table_view(request, pk):
|
|
||||||
table = ConnectedDevicesTable(ConnectedDevice.objects.filter(customer=pk))
|
|
||||||
RequestConfig(request).configure(table)
|
|
||||||
return render(request,
|
|
||||||
'devices/connected_device_list.html',
|
|
||||||
{'devices': table,
|
|
||||||
'pk': pk})
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def warranties_view(request):
|
def warranties_view(request):
|
||||||
table = WarrantiesTable(get_objects("Warranty", request.user))
|
table = WarrantiesTable(get_objects("Warranty", request.user))
|
||||||
|
@ -178,7 +152,7 @@ class DeviceInNetCreateView(LoginRequiredMixin, CreateView):
|
||||||
Set the device and customer dropdown to the device from the previous
|
Set the device and customer dropdown to the device from the previous
|
||||||
view and the customer related to the device.
|
view and the customer related to the device.
|
||||||
"""
|
"""
|
||||||
self.device = get_object_or_404(ConnectedDevice, id=self.kwargs.get('pk'))
|
self.device = get_object_or_404(Device, id=self.kwargs.get('pk'))
|
||||||
return {
|
return {
|
||||||
'device': self.device,
|
'device': self.device,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user