1
1
"""Forms."""
2
2
3
+ from typing import Any , Sequence
4
+
3
5
from dcim .models import Device
4
6
from dcim .models .devices import DeviceType
5
7
from dcim .models .sites import SiteGroup
6
8
from django import forms
7
9
from django .utils .translation import gettext as _
8
10
from extras .models import Tag
9
- from netbox_cmdb .models .snmp import SNMP , SNMPCommunity
10
- from netbox_cmdb .constants import MAX_COMMUNITY_PER_DEVICE
11
11
from utilities .forms import DynamicModelMultipleChoiceField
12
12
from utilities .forms .fields import DynamicModelChoiceField , MultipleChoiceField
13
13
14
14
from netbox .forms import NetBoxModelFilterSetForm , NetBoxModelForm
15
- from netbox_cmdb .choices import AssetMonitoringStateChoices , AssetStateChoices , SNMPCommunityType
16
- from netbox_cmdb .models .bgp import ASN , BGPPeerGroup , BGPSession
15
+ from netbox_cmdb .choices import AssetMonitoringStateChoices , AssetStateChoices
16
+ from netbox_cmdb .constants import MAX_COMMUNITY_PER_DEVICE
17
+ from netbox_cmdb .models .bgp import ASN , BGPPeerGroup , BGPSession , DeviceBGPSession
18
+ from netbox_cmdb .models .route_policy import RoutePolicy
19
+ from netbox_cmdb .models .snmp import SNMP , SNMPCommunity
17
20
18
21
19
22
class ASNForm (NetBoxModelForm ):
@@ -25,9 +28,56 @@ class Meta:
25
28
26
29
27
30
class BGPSessionForm (NetBoxModelForm ):
31
+ peer_a = DynamicModelChoiceField (
32
+ queryset = DeviceBGPSession .objects .all (),
33
+ label = _ ("Peer A" ),
34
+ required = True ,
35
+ )
36
+ peer_b = DynamicModelChoiceField (
37
+ queryset = DeviceBGPSession .objects .all (),
38
+ label = _ ("Peer B" ),
39
+ required = True ,
40
+ )
41
+
28
42
class Meta :
29
43
model = BGPSession
30
- fields = ["peer_a" , "peer_b" , "state" , "monitoring_state" ]
44
+ fields = ["peer_a" , "peer_b" , "state" , "monitoring_state" , "tenant" ]
45
+
46
+
47
+ class DeviceBGPSessionForm (NetBoxModelForm ):
48
+ def __init__ (self , * args , ** kwargs ):
49
+ instance = kwargs .get ("instance" )
50
+ initial = kwargs .get ("initial" , {})
51
+ if instance is not None and instance .device :
52
+ initial ["device" ] = str (instance .device )
53
+ kwargs ["initial" ] = initial
54
+ super ().__init__ (* args , ** kwargs )
55
+
56
+ device = forms .CharField (disabled = True )
57
+ route_policy_in = DynamicModelChoiceField (
58
+ queryset = RoutePolicy .objects .all (),
59
+ label = _ ("Route Policy in" ),
60
+ query_params = {
61
+ "device__id" : "$device" ,
62
+ },
63
+ to_field_name = "name" ,
64
+ fetch_trigger = "open" ,
65
+ required = False ,
66
+ )
67
+ route_policy_out = DynamicModelChoiceField (
68
+ queryset = RoutePolicy .objects .all (),
69
+ label = _ ("Route Policy out" ),
70
+ query_params = {
71
+ "device__id" : "$device" ,
72
+ },
73
+ to_field_name = "name" ,
74
+ fetch_trigger = "open" ,
75
+ required = False ,
76
+ )
77
+
78
+ class Meta :
79
+ model = DeviceBGPSession
80
+ fields = ["device" , "route_policy_in" , "route_policy_out" ]
31
81
32
82
33
83
class BGPSessionFilterSetForm (NetBoxModelFilterSetForm ):
@@ -67,6 +117,31 @@ class Meta:
67
117
]
68
118
69
119
120
+ class RoutePolicyForm (NetBoxModelForm ):
121
+ device = DynamicModelChoiceField (queryset = Device .objects .all ())
122
+
123
+ class Meta :
124
+ model = RoutePolicy
125
+ fields = [
126
+ "name" ,
127
+ "device" ,
128
+ "description" ,
129
+ ]
130
+
131
+
132
+ class RoutePolicyFilterSetForm (NetBoxModelFilterSetForm ):
133
+ device__id = DynamicModelMultipleChoiceField (
134
+ queryset = Device .objects .all (),
135
+ label = _ ("Device" ),
136
+ required = False ,
137
+ )
138
+ name = forms .CharField (
139
+ required = False ,
140
+ )
141
+
142
+ model = RoutePolicy
143
+
144
+
70
145
class InlineTermForm (forms .models .BaseInlineFormSet ):
71
146
"""InlineTermForm is a form that require at least one item to be valid.
72
147
It is useful for following models:
0 commit comments