mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-27 07:02:26 +00:00
Affiche uniquement les ips associées au machine type choisi
Utilise la customisation du tag bootstrap_form_typeahead pour ajouter un champs correspondant au type de machine dans les données et filtrer les match pour ne garder que les résultat qui ont le bon champs 'type'
This commit is contained in:
parent
876f988412
commit
5088403cf9
2 changed files with 43 additions and 4 deletions
|
@ -25,7 +25,7 @@ from __future__ import unicode_literals
|
||||||
from django.forms import ModelForm, Form, ValidationError
|
from django.forms import ModelForm, Form, ValidationError
|
||||||
from django import forms
|
from django import forms
|
||||||
from .models import Domain, Machine, Interface, IpList, MachineType, Extension, Mx, Text, Ns, Service, Vlan, Nas, IpType
|
from .models import Domain, Machine, Interface, IpList, MachineType, Extension, Mx, Text, Ns, Service, Vlan, Nas, IpType
|
||||||
from django.db.models import Q
|
from django.db.models import Q, F
|
||||||
from django.core.validators import validate_email
|
from django.core.validators import validate_email
|
||||||
|
|
||||||
from users.models import User
|
from users.models import User
|
||||||
|
@ -75,9 +75,9 @@ class AddInterfaceForm(EditInterfaceForm):
|
||||||
self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4"
|
self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4"
|
||||||
if not infra:
|
if not infra:
|
||||||
self.fields['type'].queryset = MachineType.objects.filter(ip_type__in=IpType.objects.filter(need_infra=False))
|
self.fields['type'].queryset = MachineType.objects.filter(ip_type__in=IpType.objects.filter(need_infra=False))
|
||||||
self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True).filter(ip_type__in=IpType.objects.filter(need_infra=False))
|
self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True).filter(ip_type__in=IpType.objects.filter(need_infra=False)).annotate(type=F('ip_type__machinetype__id'))
|
||||||
else:
|
else:
|
||||||
self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True)
|
self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True).annotate(type=F('ip_type__machinetype__id'))
|
||||||
|
|
||||||
class NewInterfaceForm(EditInterfaceForm):
|
class NewInterfaceForm(EditInterfaceForm):
|
||||||
class Meta(EditInterfaceForm.Meta):
|
class Meta(EditInterfaceForm.Meta):
|
||||||
|
|
|
@ -74,6 +74,43 @@ def form(ctx, template, request):
|
||||||
c.update(csrf(request))
|
c.update(csrf(request))
|
||||||
return render(request, template, c)
|
return render(request, template, c)
|
||||||
|
|
||||||
|
def generate_ipv4_choices( field ) :
|
||||||
|
return '[{key: "", value: "' + str(field.empty_label) + '", type: -1},' + \
|
||||||
|
', '.join([ \
|
||||||
|
'{key: ' + str(ip.id) + ',' \
|
||||||
|
' value: "' + str(ip.ipv4) + '",' \
|
||||||
|
' type: ' + str(ip.type) + '}' \
|
||||||
|
for ip in field.queryset \
|
||||||
|
]) + \
|
||||||
|
'];'
|
||||||
|
|
||||||
|
def generate_ipv4_match_func() :
|
||||||
|
return 'function(q, sync) {' \
|
||||||
|
'var select = function (array, nb, filter) {' \
|
||||||
|
'var i=0; var res=[];' \
|
||||||
|
'while (nb >= 0 && i < array.length) {' \
|
||||||
|
'if (filter(array[i])) {' \
|
||||||
|
'res.push(array[i]);' \
|
||||||
|
'nb -= 1;' \
|
||||||
|
'}' \
|
||||||
|
'i += 1;' \
|
||||||
|
'}' \
|
||||||
|
'return res;' \
|
||||||
|
'};' \
|
||||||
|
'var filter = function (elt) {' \
|
||||||
|
'return elt.type == -1 || elt.type == $("#id_type").val();' \
|
||||||
|
'};' \
|
||||||
|
'var cb = function (a) { sync(a.filter(filter)); };' \
|
||||||
|
'if (q === "") {' \
|
||||||
|
'sync( engine.get( select(choices, 10, filter).map(' \
|
||||||
|
'function (elt) { return elt.key; }' \
|
||||||
|
') ) );' \
|
||||||
|
'} else {' \
|
||||||
|
'engine.search(q, cb);' \
|
||||||
|
'}' \
|
||||||
|
'}'
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def new_machine(request, userid):
|
def new_machine(request, userid):
|
||||||
try:
|
try:
|
||||||
|
@ -117,7 +154,9 @@ def new_machine(request, userid):
|
||||||
reversion.set_comment("Création")
|
reversion.set_comment("Création")
|
||||||
messages.success(request, "La machine a été créée")
|
messages.success(request, "La machine a été créée")
|
||||||
return redirect("/users/profil/" + str(user.id))
|
return redirect("/users/profil/" + str(user.id))
|
||||||
return form({'machineform': machine, 'interfaceform': interface, 'domainform': domain}, 'machines/machine.html', request)
|
i_choices = { 'ipv4': generate_ipv4_choices( interface.fields['ipv4'] ) }
|
||||||
|
i_match_func = { 'ipv4': generate_ipv4_match_func() }
|
||||||
|
return form({'machineform': machine, 'interfaceform': interface, 'domainform': domain, 'i_choices': i_choices, 'i_match_func': i_match_func}, 'machines/machine.html', request)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def edit_interface(request, interfaceid):
|
def edit_interface(request, interfaceid):
|
||||||
|
|
Loading…
Reference in a new issue