limit the dropdowns in device and computer forms
This commit is contained in:
parent
c2104b23f7
commit
6fc66ffb78
|
@ -11,6 +11,9 @@ from computers.models import ComputerSoftwareRelation
|
|||
from computers.models import Raid
|
||||
|
||||
from customers.models import Customer
|
||||
from customers.models import Location
|
||||
|
||||
from users.models import User
|
||||
|
||||
|
||||
class ComputerCreateForm(forms.ModelForm):
|
||||
|
@ -27,16 +30,31 @@ class ComputerCreateForm(forms.ModelForm):
|
|||
we can use to assign to the field.
|
||||
"""
|
||||
super(ComputerCreateForm, self).__init__(*args, **kwargs)
|
||||
if not user.is_superuser:
|
||||
self.fields['customer'].queryset = (
|
||||
utils.get_all_objects_for_allowed_customers(
|
||||
Customer, user=user))
|
||||
customers = utils.objects_for_allowed_customers(Customer,
|
||||
user=user)
|
||||
self.fields['customer'].queryset = customers
|
||||
|
||||
|
||||
class ComputerUpdateForm(forms.ModelForm):
|
||||
"""
|
||||
Basic form class to use crispies HTML5 forms.
|
||||
"""
|
||||
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(ComputerUpdateForm, self).__init__(*args, **kwargs)
|
||||
customers = utils.objects_for_allowed_customers(Customer,
|
||||
user=request.user)
|
||||
locations = utils.objects_for_allowed_customers(Location,
|
||||
user=request.user)
|
||||
hosts = utils.objects_for_allowed_customers(Computer,
|
||||
user=request.user)
|
||||
users = utils.objects_for_allowed_customers(User,
|
||||
user=request.user)
|
||||
self.fields['customer'].queryset = customers
|
||||
self.fields['location'].queryset = locations
|
||||
self.fields['host'].queryset = hosts
|
||||
self.fields['user'].queryset = users
|
||||
|
||||
class Meta:
|
||||
model = Computer
|
||||
fields = '__all__'
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import pytest
|
||||
from mixer.backend.django import mixer
|
||||
|
||||
from django.http import HttpRequest
|
||||
|
||||
from computers import forms
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
@ -27,17 +29,19 @@ def test_computer_create_form(create_admin_user):
|
|||
|
||||
def test_computer_update_form(create_admin_user):
|
||||
fixture = create_admin_user()
|
||||
form = forms.ComputerUpdateForm(data={})
|
||||
request = HttpRequest()
|
||||
request.user = fixture['admin']
|
||||
form = forms.ComputerUpdateForm(request, data={})
|
||||
assert form.is_valid() is False, (
|
||||
"Should be false because no data was given")
|
||||
|
||||
data = {"name": "pharma-pc1",
|
||||
"customer": 20356}
|
||||
form = forms.ComputerUpdateForm(data=data)
|
||||
form = forms.ComputerUpdateForm(request, data=data)
|
||||
assert form.is_valid() is False, (
|
||||
"Should be false because the customer doesn't exist.")
|
||||
|
||||
data = {"name": "pharma-pc1",
|
||||
"customer": fixture['customer'].id}
|
||||
form = forms.ComputerUpdateForm(data=data)
|
||||
form = forms.ComputerUpdateForm(request, data=data)
|
||||
assert form.is_valid() is True, ("Should be valid with the given data.")
|
||||
|
|
|
@ -92,7 +92,7 @@ class ComputersFilterView(LoginRequiredMixin, SingleTableMixin, FilterView):
|
|||
filterset_class = ComputerFilter
|
||||
|
||||
def get_queryset(self):
|
||||
return utils.get_all_objects_for_allowed_customers(Computer,
|
||||
return utils.objects_for_allowed_customers(Computer,
|
||||
self.request.user)
|
||||
|
||||
|
||||
|
@ -135,12 +135,12 @@ def computer_update_view(request, pk):
|
|||
user=request.user,
|
||||
pk=pk)
|
||||
if request.method == 'POST':
|
||||
form = ComputerUpdateForm(request.POST, instance=computer)
|
||||
form = ComputerUpdateForm(request, request.POST, instance=computer)
|
||||
if form.is_valid():
|
||||
computer = form.save()
|
||||
return redirect(computer)
|
||||
else:
|
||||
form = ComputerUpdateForm(instance=computer)
|
||||
form = ComputerUpdateForm(request, instance=computer)
|
||||
return TemplateResponse(request, template_name, {'form': form})
|
||||
|
||||
|
||||
|
|
|
@ -10,21 +10,21 @@ from devices.models import Device
|
|||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_get_all_objects_for_allowed_customers(create_admin_user):
|
||||
def test_objects_for_allowed_customers(create_admin_user):
|
||||
fixture = create_admin_user()
|
||||
customer = fixture['customer']
|
||||
admin = fixture['admin']
|
||||
objects = utils.get_all_objects_for_allowed_customers(
|
||||
objects = utils.objects_for_allowed_customers(
|
||||
Customer, user=admin)
|
||||
assert objects[0] == customer
|
||||
|
||||
|
||||
def test_get_all_objects_for_allowed_customers_device(create_admin_user):
|
||||
def test_objects_for_allowed_customers_device(create_admin_user):
|
||||
fixture = create_admin_user()
|
||||
customer = fixture['customer']
|
||||
admin = fixture['admin']
|
||||
device = mixer.blend(Device, customer=customer)
|
||||
objects = utils.get_all_objects_for_allowed_customers(
|
||||
objects = utils.objects_for_allowed_customers(
|
||||
Device, user=admin)
|
||||
assert objects[0] == device
|
||||
|
||||
|
@ -33,7 +33,7 @@ def test_get_all_objects_for_unallowed_customers(create_admin_user):
|
|||
fixture = create_admin_user()
|
||||
customer = mixer.blend(Customer)
|
||||
admin = fixture['admin']
|
||||
objects = utils.get_all_objects_for_allowed_customers(
|
||||
objects = utils.objects_for_allowed_customers(
|
||||
Customer, user=admin)
|
||||
assert customer not in objects
|
||||
|
||||
|
@ -43,6 +43,6 @@ def test_get_all_objects_for_unallowed_customers_device(create_admin_user):
|
|||
customer = mixer.blend(Customer)
|
||||
admin = fixture['admin']
|
||||
device = mixer.blend(Device, customer=customer)
|
||||
objects = utils.get_all_objects_for_allowed_customers(
|
||||
objects = utils.objects_for_allowed_customers(
|
||||
Device, user=admin)
|
||||
assert device not in objects
|
||||
|
|
|
@ -52,7 +52,7 @@ def get_object_with_view_permission(model, user=None, pk=None):
|
|||
raise Http404()
|
||||
|
||||
|
||||
def get_all_objects_for_allowed_customers(model, user=None):
|
||||
def objects_for_allowed_customers(model, user=None):
|
||||
customers = _get_customers(user)
|
||||
if model.__name__ == 'Customer':
|
||||
return customers
|
||||
|
|
|
@ -16,7 +16,7 @@ from .tables import CustomersTable
|
|||
|
||||
@login_required
|
||||
def customers_table_view(request):
|
||||
customers = utils.get_all_objects_for_allowed_customers(
|
||||
customers = utils.objects_for_allowed_customers(
|
||||
Customer, request.user)
|
||||
table = CustomersTable(customers)
|
||||
RequestConfig(request).configure(table)
|
||||
|
|
|
@ -3,11 +3,14 @@ import floppyforms.__future__ as forms
|
|||
from core import utils
|
||||
|
||||
from customers.models import Customer
|
||||
from customers.models import Location
|
||||
|
||||
from devices.models import Device
|
||||
from devices.models import DeviceInNet
|
||||
from devices.models import Warranty
|
||||
|
||||
from users.models import User
|
||||
|
||||
|
||||
class DeviceCreateForm(forms.ModelForm):
|
||||
class Meta:
|
||||
|
@ -23,9 +26,8 @@ class DeviceCreateForm(forms.ModelForm):
|
|||
we can use to assign to the field.
|
||||
"""
|
||||
super(DeviceCreateForm, self).__init__(*args, **kwargs)
|
||||
if not user.is_superuser:
|
||||
self.fields['customer'].queryset = (
|
||||
utils.get_all_objects_for_allowed_customers(
|
||||
utils.objects_for_allowed_customers(
|
||||
Customer, user=user))
|
||||
|
||||
|
||||
|
@ -33,6 +35,19 @@ class DeviceUpdateForm(forms.ModelForm):
|
|||
"""
|
||||
Basic form class to use crispies HTML5 forms.
|
||||
"""
|
||||
|
||||
def __init__(self, request, *args, **kwargs):
|
||||
super(DeviceUpdateForm, self).__init__(*args, **kwargs)
|
||||
customers = utils.objects_for_allowed_customers(Customer,
|
||||
user=request.user)
|
||||
locations = utils.objects_for_allowed_customers(Location,
|
||||
user=request.user)
|
||||
users = utils.objects_for_allowed_customers(User,
|
||||
user=request.user)
|
||||
self.fields['customer'].queryset = customers
|
||||
self.fields['location'].queryset = locations
|
||||
self.fields['user'].queryset = users
|
||||
|
||||
class Meta:
|
||||
model = Device
|
||||
fields = '__all__'
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import pytest
|
||||
from mixer.backend.django import mixer
|
||||
|
||||
from django.http import HttpRequest
|
||||
|
||||
from devices import forms
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
@ -27,19 +29,21 @@ def test_device_create_form(create_admin_user):
|
|||
|
||||
def test_device_update_form(create_admin_user):
|
||||
fixture = create_admin_user()
|
||||
form = forms.DeviceUpdateForm(data={})
|
||||
request = HttpRequest()
|
||||
request.user = fixture['admin']
|
||||
form = forms.DeviceUpdateForm(request, data={})
|
||||
assert form.is_valid() is False, (
|
||||
"Should be false because no data was given")
|
||||
|
||||
data = {"name": "pharma-device1",
|
||||
"customer": 3}
|
||||
form = forms.DeviceUpdateForm(data=data)
|
||||
form = forms.DeviceUpdateForm(request, data=data)
|
||||
assert form.is_valid() is False, (
|
||||
"Should be false because the customer doesn't exist.")
|
||||
|
||||
data = {"name": "pharma-device1",
|
||||
"customer": fixture['customer'].id}
|
||||
form = forms.DeviceUpdateForm(data=data)
|
||||
form = forms.DeviceUpdateForm(request, data=data)
|
||||
assert form.is_valid() is True, ("Should be valid with the given data.")
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ urlpatterns = [
|
|||
views.DeviceCreateFromCustomerView.as_view(),
|
||||
name='device_create'),
|
||||
path('update/device/<int:pk>/',
|
||||
views.DeviceUpdateView.as_view(),
|
||||
views.device_update_view,
|
||||
name='device_update'),
|
||||
path('delete/device/<int:pk>/', views.DeviceDeleteView.as_view(),
|
||||
name='device_delete'),
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.shortcuts import render
|
||||
from django.template.response import TemplateResponse
|
||||
from django.urls import reverse
|
||||
from django.views.generic import CreateView
|
||||
from django.views.generic import DetailView
|
||||
|
@ -60,7 +61,7 @@ def devices_table_view(request, pk):
|
|||
@login_required
|
||||
def warranties_view(request):
|
||||
table = WarrantiesTable(
|
||||
utils.get_all_objects_for_allowed_customers(Warranty, request.user))
|
||||
utils.objects_for_allowed_customers(Warranty, request.user))
|
||||
RequestConfig(request).configure(table)
|
||||
return render(request,
|
||||
'devices/warranties_list.html',
|
||||
|
@ -96,13 +97,23 @@ class DeviceCreateFromCustomerView(LoginRequiredMixin, CreateView):
|
|||
}
|
||||
|
||||
|
||||
class DeviceUpdateView(LoginRequiredMixin, UpdateView):
|
||||
model = Device
|
||||
form_class = DeviceUpdateForm
|
||||
template_name = 'devices/device_update.html'
|
||||
|
||||
def get_success_url(self):
|
||||
return self.request.POST.get('previous_page')
|
||||
@login_required
|
||||
def device_update_view(request, pk):
|
||||
"""
|
||||
A view to create a customer.
|
||||
"""
|
||||
template_name = 'computers/computer_update.html'
|
||||
device = utils.get_object_with_view_permission(Device,
|
||||
user=request.user,
|
||||
pk=pk)
|
||||
if request.method == 'POST':
|
||||
form = DeviceUpdateForm(request, request.POST, instance=device)
|
||||
if form.is_valid():
|
||||
device = form.save()
|
||||
return redirect(device)
|
||||
else:
|
||||
form = DeviceUpdateForm(request, instance=device)
|
||||
return TemplateResponse(request, template_name, {'form': form})
|
||||
|
||||
|
||||
class DeviceDeleteView(LoginRequiredMixin, DeleteView):
|
||||
|
|
Loading…
Reference in New Issue