netbox-plugin-dns 1.1.2__py3-none-any.whl → 1.1.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of netbox-plugin-dns might be problematic. Click here for more details.

Files changed (84) hide show
  1. netbox_dns/__init__.py +14 -6
  2. netbox_dns/api/nested_serializers.py +3 -2
  3. netbox_dns/api/serializers_/nameserver.py +2 -1
  4. netbox_dns/api/serializers_/record.py +5 -4
  5. netbox_dns/api/serializers_/record_template.py +2 -1
  6. netbox_dns/api/serializers_/view.py +2 -1
  7. netbox_dns/api/serializers_/zone.py +12 -11
  8. netbox_dns/api/serializers_/zone_template.py +8 -7
  9. netbox_dns/api/views.py +9 -4
  10. netbox_dns/choices/record.py +4 -2
  11. netbox_dns/choices/zone.py +8 -4
  12. netbox_dns/fields/address.py +5 -22
  13. netbox_dns/fields/network.py +2 -1
  14. netbox_dns/fields/rfc2317.py +7 -3
  15. netbox_dns/filtersets/nameserver.py +3 -2
  16. netbox_dns/filtersets/record.py +14 -9
  17. netbox_dns/filtersets/record_template.py +3 -2
  18. netbox_dns/filtersets/view.py +3 -2
  19. netbox_dns/filtersets/zone.py +24 -22
  20. netbox_dns/filtersets/zone_template.py +15 -14
  21. netbox_dns/forms/nameserver.py +41 -17
  22. netbox_dns/forms/record.py +61 -32
  23. netbox_dns/forms/record_template.py +49 -28
  24. netbox_dns/forms/registrar.py +21 -17
  25. netbox_dns/forms/registration_contact.py +37 -25
  26. netbox_dns/forms/view.py +49 -27
  27. netbox_dns/forms/zone.py +173 -120
  28. netbox_dns/forms/zone_template.py +53 -43
  29. netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  30. netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
  31. netbox_dns/management/commands/rebuild_dnssync.py +14 -1
  32. netbox_dns/models/nameserver.py +6 -2
  33. netbox_dns/models/record.py +74 -40
  34. netbox_dns/models/record_template.py +17 -9
  35. netbox_dns/models/registrar.py +11 -7
  36. netbox_dns/models/registration_contact.py +23 -11
  37. netbox_dns/models/view.py +15 -6
  38. netbox_dns/models/zone.py +83 -50
  39. netbox_dns/models/zone_template.py +12 -10
  40. netbox_dns/navigation.py +30 -28
  41. netbox_dns/signals/ipam_dnssync.py +21 -14
  42. netbox_dns/tables/ipam_dnssync.py +2 -1
  43. netbox_dns/tables/nameserver.py +2 -0
  44. netbox_dns/tables/record.py +21 -11
  45. netbox_dns/tables/record_template.py +12 -5
  46. netbox_dns/tables/registrar.py +2 -0
  47. netbox_dns/tables/registration_contact.py +2 -0
  48. netbox_dns/tables/view.py +3 -1
  49. netbox_dns/tables/zone.py +15 -2
  50. netbox_dns/tables/zone_template.py +7 -0
  51. netbox_dns/templates/netbox_dns/nameserver.html +6 -5
  52. netbox_dns/templates/netbox_dns/record/managed.html +2 -1
  53. netbox_dns/templates/netbox_dns/record/related.html +26 -14
  54. netbox_dns/templates/netbox_dns/record.html +39 -20
  55. netbox_dns/templates/netbox_dns/recordtemplate.html +27 -15
  56. netbox_dns/templates/netbox_dns/registrar.html +11 -10
  57. netbox_dns/templates/netbox_dns/registrationcontact.html +16 -15
  58. netbox_dns/templates/netbox_dns/view/button.html +2 -1
  59. netbox_dns/templates/netbox_dns/view/prefix.html +7 -4
  60. netbox_dns/templates/netbox_dns/view/related.html +26 -10
  61. netbox_dns/templates/netbox_dns/view.html +11 -14
  62. netbox_dns/templates/netbox_dns/zone/base.html +2 -1
  63. netbox_dns/templates/netbox_dns/zone/child.html +3 -2
  64. netbox_dns/templates/netbox_dns/zone/record.html +3 -2
  65. netbox_dns/templates/netbox_dns/zone/registration.html +8 -7
  66. netbox_dns/templates/netbox_dns/zone.html +28 -30
  67. netbox_dns/templates/netbox_dns/zonetemplate.html +27 -17
  68. netbox_dns/utilities/ipam_dnssync.py +15 -4
  69. netbox_dns/validators/dns_name.py +11 -4
  70. netbox_dns/validators/dns_value.py +55 -9
  71. netbox_dns/validators/rfc2317.py +6 -3
  72. netbox_dns/views/nameserver.py +4 -2
  73. netbox_dns/views/record_template.py +4 -3
  74. netbox_dns/views/registrar.py +3 -1
  75. netbox_dns/views/registration_contact.py +2 -1
  76. netbox_dns/views/view.py +2 -1
  77. netbox_dns/views/zone.py +6 -4
  78. netbox_dns/views/zone_template.py +8 -7
  79. {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/METADATA +2 -2
  80. netbox_plugin_dns-1.1.4.dist-info/RECORD +150 -0
  81. netbox_plugin_dns-1.1.2.dist-info/RECORD +0 -148
  82. {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/LICENSE +0 -0
  83. {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/WHEEL +0 -0
  84. {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/top_level.txt +0 -0
@@ -2,6 +2,8 @@ import netaddr
2
2
 
3
3
  import django_filters
4
4
  from django.db.models import Q
5
+ from django.utils.translation import gettext as _
6
+ from django.utils.translation import pgettext as _p
5
7
 
6
8
  from netbox.filtersets import NetBoxModelFilterSet
7
9
  from tenancy.filtersets import TenancyFilterSet
@@ -20,69 +22,69 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
20
22
  )
21
23
  view_id = django_filters.ModelMultipleChoiceFilter(
22
24
  queryset=View.objects.all(),
23
- label="View ID",
25
+ label=_("View ID"),
24
26
  )
25
27
  view = django_filters.ModelMultipleChoiceFilter(
26
28
  queryset=View.objects.all(),
27
29
  field_name="view__name",
28
30
  to_field_name="name",
29
- label="View",
31
+ label=_p("DNS", "View"),
30
32
  )
31
33
  # DEPRECATED: Remove in 1.1
32
34
  name_server_id = django_filters.ModelMultipleChoiceFilter(
33
35
  queryset=NameServer.objects.all(),
34
36
  field_name="nameservers",
35
37
  to_field_name="id",
36
- label="Nameserver IDs",
38
+ label=_("Nameserver IDs"),
37
39
  )
38
40
  # DEPRECATED: Remove in 1.1
39
41
  name_server = django_filters.ModelMultipleChoiceFilter(
40
42
  queryset=NameServer.objects.all(),
41
43
  field_name="nameservers__name",
42
44
  to_field_name="name",
43
- label="Nameservers",
45
+ label=_("Nameservers"),
44
46
  )
45
47
  nameserver_id = django_filters.ModelMultipleChoiceFilter(
46
48
  queryset=NameServer.objects.all(),
47
49
  field_name="nameservers",
48
50
  to_field_name="id",
49
- label="Nameservers ID",
51
+ label=_("Nameservers ID"),
50
52
  )
51
53
  nameserver = django_filters.ModelMultipleChoiceFilter(
52
54
  queryset=NameServer.objects.all(),
53
55
  field_name="nameservers__name",
54
56
  to_field_name="name",
55
- label="Nameserver",
57
+ label=_("Nameserver"),
56
58
  )
57
59
  soa_mname_id = django_filters.ModelMultipleChoiceFilter(
58
60
  queryset=NameServer.objects.all(),
59
- label="SOA MName ID",
61
+ label=_("SOA MName ID"),
60
62
  )
61
63
  soa_mname = django_filters.ModelMultipleChoiceFilter(
62
64
  queryset=NameServer.objects.all(),
63
65
  field_name="soa_mname__name",
64
66
  to_field_name="name",
65
- label="SOA MName",
67
+ label=_("SOA MName"),
66
68
  )
67
69
  arpa_network = MultiValueCharFilter(
68
70
  method="filter_arpa_network",
69
- label="ARPA Network",
71
+ label=_("ARPA Network"),
70
72
  )
71
73
  rfc2317_prefix = MultiValueCharFilter(
72
74
  method="filter_rfc2317_prefix",
73
- label="RFC2317 Prefix",
75
+ label=_("RFC2317 Prefix"),
74
76
  )
75
77
  rfc2317_parent_zone_id = django_filters.ModelMultipleChoiceFilter(
76
78
  queryset=Zone.objects.all(),
77
79
  field_name="rfc2317_parent_zone",
78
80
  to_field_name="id",
79
- label="RFC2317 Parent Zone",
81
+ label=_("RFC2317 Parent Zone"),
80
82
  )
81
83
  rfc2317_parent_zone = django_filters.ModelMultipleChoiceFilter(
82
84
  queryset=Zone.objects.all(),
83
85
  field_name="rfc2317_parent_zone__name",
84
86
  to_field_name="name",
85
- label="RFC2317 Parent Zone",
87
+ label=_("RFC2317 Parent Zone"),
86
88
  )
87
89
  registrar_id = django_filters.ModelMultipleChoiceFilter(
88
90
  queryset=Registrar.objects.all(),
@@ -92,50 +94,50 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
92
94
  queryset=Registrar.objects.all(),
93
95
  field_name="registrar__name",
94
96
  to_field_name="name",
95
- label="Registrar",
97
+ label=_("Registrar"),
96
98
  )
97
99
  registrant_id = django_filters.ModelMultipleChoiceFilter(
98
100
  queryset=RegistrationContact.objects.all(),
99
- label="Registrant ID",
101
+ label=_("Registrant ID"),
100
102
  )
101
103
  registrant = django_filters.ModelMultipleChoiceFilter(
102
104
  queryset=RegistrationContact.objects.all(),
103
105
  field_name="registrant__contact_id",
104
106
  to_field_name="contact_id",
105
- label="Registrant",
107
+ label=_("Registrant"),
106
108
  )
107
109
  admin_c_id = django_filters.ModelMultipleChoiceFilter(
108
110
  queryset=RegistrationContact.objects.all(),
109
- label="Administrative RegistrationContact ID",
111
+ label=_("Administrative Contact ID"),
110
112
  )
111
113
  admin_c = django_filters.ModelMultipleChoiceFilter(
112
114
  queryset=RegistrationContact.objects.all(),
113
115
  field_name="admin_c__contact_id",
114
116
  to_field_name="contact_id",
115
- label="Administrative RegistrationContact",
117
+ label=_("Administrative Contact"),
116
118
  )
117
119
  tech_c_id = django_filters.ModelMultipleChoiceFilter(
118
120
  queryset=RegistrationContact.objects.all(),
119
- label="Technical RegistrationContact ID",
121
+ label=_("Technical Contact ID"),
120
122
  )
121
123
  tech_c = django_filters.ModelMultipleChoiceFilter(
122
124
  queryset=RegistrationContact.objects.all(),
123
125
  field_name="tech_c__contact_id",
124
126
  to_field_name="contact_id",
125
- label="Technical RegistrationContact",
127
+ label=_("Technical Contact"),
126
128
  )
127
129
  billing_c_id = django_filters.ModelMultipleChoiceFilter(
128
130
  queryset=RegistrationContact.objects.all(),
129
- label="Billing RegistrationContact ID",
131
+ label=_("Billing Contact ID"),
130
132
  )
131
133
  billing_c = django_filters.ModelMultipleChoiceFilter(
132
134
  queryset=RegistrationContact.objects.all(),
133
135
  field_name="billing_c__contact_id",
134
136
  to_field_name="contact_id",
135
- label="Billing RegistrationContact",
137
+ label=_("Billing Contact"),
136
138
  )
137
139
  active = django_filters.BooleanFilter(
138
- label="Zone is active",
140
+ label=_("Zone is active"),
139
141
  )
140
142
 
141
143
  class Meta:
@@ -1,6 +1,7 @@
1
1
  import django_filters
2
2
 
3
3
  from django.db.models import Q
4
+ from django.utils.translation import gettext as _
4
5
 
5
6
  from netbox.filtersets import NetBoxModelFilterSet
6
7
  from tenancy.filtersets import TenancyFilterSet
@@ -22,75 +23,75 @@ class ZoneTemplateFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
22
23
  queryset=RecordTemplate.objects.all(),
23
24
  field_name="record_templates",
24
25
  to_field_name="id",
25
- label="Record Template ID",
26
+ label=_("Record Template ID"),
26
27
  )
27
28
  record_template = django_filters.ModelMultipleChoiceFilter(
28
29
  queryset=RecordTemplate.objects.all(),
29
30
  field_name="record_templates__name",
30
31
  to_field_name="name",
31
- label="Record Template",
32
+ label=_("Record Template"),
32
33
  )
33
34
  nameserver_id = django_filters.ModelMultipleChoiceFilter(
34
35
  queryset=NameServer.objects.all(),
35
36
  field_name="nameservers",
36
37
  to_field_name="id",
37
- label="Nameservers ID",
38
+ label=_("Nameservers ID"),
38
39
  )
39
40
  nameserver = django_filters.ModelMultipleChoiceFilter(
40
41
  queryset=NameServer.objects.all(),
41
42
  field_name="nameservers__name",
42
43
  to_field_name="name",
43
- label="Nameserver",
44
+ label=_("Nameserver"),
44
45
  )
45
46
  registrar_id = django_filters.ModelMultipleChoiceFilter(
46
47
  queryset=Registrar.objects.all(),
47
- label="Registrar ID",
48
+ label=_("Registrar ID"),
48
49
  )
49
50
  registrar = django_filters.ModelMultipleChoiceFilter(
50
51
  queryset=Registrar.objects.all(),
51
52
  field_name="registrar__name",
52
53
  to_field_name="name",
53
- label="Registrar",
54
+ label=_("Registrar"),
54
55
  )
55
56
  registrant_id = django_filters.ModelMultipleChoiceFilter(
56
57
  queryset=RegistrationContact.objects.all(),
57
- label="Registrant ID",
58
+ label=_("Registrant ID"),
58
59
  )
59
60
  registrant = django_filters.ModelMultipleChoiceFilter(
60
61
  queryset=RegistrationContact.objects.all(),
61
62
  field_name="registrant__contact_id",
62
63
  to_field_name="contact_id",
63
- label="Registrant",
64
+ label=_("Registrant"),
64
65
  )
65
66
  admin_c_id = django_filters.ModelMultipleChoiceFilter(
66
67
  queryset=RegistrationContact.objects.all(),
67
- label="Administrative RegistrationContact ID",
68
+ label=_("Administrative Contact ID"),
68
69
  )
69
70
  admin_c = django_filters.ModelMultipleChoiceFilter(
70
71
  queryset=RegistrationContact.objects.all(),
71
72
  field_name="admin_c__contact_id",
72
73
  to_field_name="contact_id",
73
- label="Administrative RegistrationContact",
74
+ label=_("Administrative Contact"),
74
75
  )
75
76
  tech_c_id = django_filters.ModelMultipleChoiceFilter(
76
77
  queryset=RegistrationContact.objects.all(),
77
- label="Technical RegistrationContact ID",
78
+ label=_("Technical Contact ID"),
78
79
  )
79
80
  tech_c = django_filters.ModelMultipleChoiceFilter(
80
81
  queryset=RegistrationContact.objects.all(),
81
82
  field_name="tech_c__contact_id",
82
83
  to_field_name="contact_id",
83
- label="Technical RegistrationContact",
84
+ label=_("Technical Contact"),
84
85
  )
85
86
  billing_c_id = django_filters.ModelMultipleChoiceFilter(
86
87
  queryset=RegistrationContact.objects.all(),
87
- label="Billing RegistrationContact ID",
88
+ label=_("Billing Contact ID"),
88
89
  )
89
90
  billing_c = django_filters.ModelMultipleChoiceFilter(
90
91
  queryset=RegistrationContact.objects.all(),
91
92
  field_name="billing_c__contact_id",
92
93
  to_field_name="contact_id",
93
- label="Billing RegistrationContact",
94
+ label=_("Billing Contact"),
94
95
  )
95
96
 
96
97
  class Meta:
@@ -1,4 +1,5 @@
1
1
  from django import forms
2
+ from django.utils.translation import gettext_lazy as _
2
3
 
3
4
  from netbox.forms import (
4
5
  NetBoxModelBulkEditForm,
@@ -14,7 +15,7 @@ from utilities.forms.fields import (
14
15
  DynamicModelMultipleChoiceField,
15
16
  )
16
17
  from utilities.forms.rendering import FieldSet
17
- from tenancy.models import Tenant
18
+ from tenancy.models import Tenant, TenantGroup
18
19
  from tenancy.forms import TenancyForm, TenancyFilterForm
19
20
 
20
21
  from netbox_dns.models import NameServer, Zone
@@ -37,51 +38,61 @@ class NameServerForm(TenancyForm, NetBoxModelForm):
37
38
  if initial_name:
38
39
  self.initial["name"] = name_to_unicode(initial_name)
39
40
 
41
+ name = forms.CharField(
42
+ required=True,
43
+ label=_("Name"),
44
+ )
45
+
40
46
  fieldsets = (
41
- FieldSet("name", "description", name="Nameserver"),
42
- FieldSet("tenant_group", "tenant", name="Tenancy"),
43
- FieldSet("tags", name="Tags"),
47
+ FieldSet("name", "description", name=_("Nameserver")),
48
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
49
+ FieldSet("tags", name=_("Tags")),
44
50
  )
45
51
 
46
52
  class Meta:
47
53
  model = NameServer
48
- fields = ("name", "description", "tags", "tenant")
54
+ fields = ("name", "description", "tags", "tenant_group", "tenant")
49
55
 
50
56
 
51
57
  class NameServerFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
52
58
  model = NameServer
53
59
 
60
+ name = forms.CharField(
61
+ required=False,
62
+ label=_("Name"),
63
+ )
54
64
  zone_id = DynamicModelMultipleChoiceField(
55
65
  queryset=Zone.objects.all(),
56
66
  required=False,
57
- label="Zones",
67
+ label=_("Zones"),
58
68
  )
59
69
  soa_zone_id = DynamicModelMultipleChoiceField(
60
70
  queryset=Zone.objects.all(),
61
71
  required=False,
62
- label="SOA Zones",
63
- )
64
- name = forms.CharField(
65
- required=False,
72
+ label=_("SOA Zones"),
66
73
  )
67
74
  description = forms.CharField(
68
75
  required=False,
76
+ label=_("Description"),
69
77
  )
70
78
  tag = TagFilterField(NameServer)
71
79
 
72
80
  fieldsets = (
73
81
  FieldSet("q", "filter_id", "tag"),
74
- FieldSet("name", "zone_id", "soa_zone_id", "description", name="Attributes"),
75
- FieldSet("tenant_group_id", "tenant_id", name="Tenancy"),
82
+ FieldSet("name", "zone_id", "soa_zone_id", "description", name=_("Attributes")),
83
+ FieldSet("tenant_group_id", "tenant_id", name=_("Tenancy")),
76
84
  )
77
85
 
78
86
 
79
87
  class NameServerImportForm(NetBoxModelImportForm):
88
+ name = forms.CharField(
89
+ label=_("Name"),
90
+ )
80
91
  tenant = CSVModelChoiceField(
81
92
  queryset=Tenant.objects.all(),
82
93
  to_field_name="name",
83
94
  required=False,
84
- help_text="Assigned tenant",
95
+ label=_("Tenant"),
85
96
  )
86
97
 
87
98
  class Meta:
@@ -98,16 +109,29 @@ class NameServerImportForm(NetBoxModelImportForm):
98
109
  class NameServerBulkEditForm(NetBoxModelBulkEditForm):
99
110
  model = NameServer
100
111
 
101
- description = forms.CharField(max_length=200, required=False)
102
- tenant = DynamicModelChoiceField(queryset=Tenant.objects.all(), required=False)
112
+ description = forms.CharField(
113
+ max_length=200,
114
+ required=False,
115
+ label=_("Description"),
116
+ )
117
+ tenant_group = DynamicModelChoiceField(
118
+ queryset=TenantGroup.objects.all(),
119
+ required=False,
120
+ label=_("Tenant Group"),
121
+ )
122
+ tenant = DynamicModelChoiceField(
123
+ queryset=Tenant.objects.all(),
124
+ required=False,
125
+ label=_("Tenant"),
126
+ )
103
127
 
104
128
  fieldsets = (
105
129
  FieldSet(
106
- "name",
107
130
  "description",
131
+ "tenant_group",
108
132
  "tenant",
109
133
  "tags",
110
- name="Attributes",
134
+ name=_("Attributes"),
111
135
  ),
112
136
  )
113
137
 
@@ -1,4 +1,6 @@
1
1
  from django import forms
2
+ from django.utils.translation import gettext_lazy as _
3
+ from django.utils.translation import pgettext_lazy as _p
2
4
 
3
5
  from netbox.forms import (
4
6
  NetBoxModelBulkEditForm,
@@ -16,7 +18,7 @@ from utilities.forms.fields import (
16
18
  from utilities.forms.widgets import BulkEditNullBooleanSelect
17
19
  from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
18
20
  from utilities.forms.rendering import FieldSet
19
- from tenancy.models import Tenant
21
+ from tenancy.models import Tenant, TenantGroup
20
22
  from tenancy.forms import TenancyForm, TenancyFilterForm
21
23
 
22
24
  from netbox_dns.models import View, Zone, Record
@@ -36,12 +38,6 @@ class RecordForm(TenancyForm, NetBoxModelForm):
36
38
  def __init__(self, *args, **kwargs):
37
39
  super().__init__(*args, **kwargs)
38
40
 
39
- initial_zone_id = self.initial.get("zone")
40
- if initial_zone_id is not None:
41
- self.initial["view"] = Zone.objects.get(pk=initial_zone_id).view
42
- else:
43
- self.initial["view"] = View.get_default_view()
44
-
45
41
  initial_name = self.initial.get("name")
46
42
  if initial_name:
47
43
  self.initial["name"] = name_to_unicode(initial_name)
@@ -49,7 +45,10 @@ class RecordForm(TenancyForm, NetBoxModelForm):
49
45
  view = DynamicModelChoiceField(
50
46
  queryset=View.objects.all(),
51
47
  required=False,
52
- label="View",
48
+ initial_params={
49
+ "zone": "$zone",
50
+ },
51
+ label=_p("DNS", "View"),
53
52
  )
54
53
  zone = DynamicModelChoiceField(
55
54
  queryset=Zone.objects.all(),
@@ -57,16 +56,16 @@ class RecordForm(TenancyForm, NetBoxModelForm):
57
56
  query_params={
58
57
  "view_id": "$view",
59
58
  },
60
- label="Zone",
59
+ label=_("Zone"),
61
60
  )
62
61
 
63
62
  disable_ptr = forms.BooleanField(
64
- label="Disable PTR",
65
63
  required=False,
64
+ label=_("Disable PTR"),
66
65
  )
67
66
  ttl = forms.IntegerField(
68
67
  required=False,
69
- label="TTL",
68
+ label=_("TTL"),
70
69
  )
71
70
 
72
71
  fieldsets = (
@@ -82,8 +81,8 @@ class RecordForm(TenancyForm, NetBoxModelForm):
82
81
  "description",
83
82
  name="Record",
84
83
  ),
85
- FieldSet("tenant_group", "tenant", name="Tenancy"),
86
- FieldSet("tags", name="Tags"),
84
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
85
+ FieldSet("tags", name=_("Tags")),
87
86
  )
88
87
 
89
88
  class Meta:
@@ -98,8 +97,9 @@ class RecordForm(TenancyForm, NetBoxModelForm):
98
97
  "ttl",
99
98
  "disable_ptr",
100
99
  "description",
101
- "tags",
100
+ "tenant_group",
102
101
  "tenant",
102
+ "tags",
103
103
  )
104
104
 
105
105
 
@@ -108,6 +108,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
108
108
  fieldsets = (
109
109
  FieldSet("q", "filter_id", "tag"),
110
110
  FieldSet(
111
+ "view_id",
111
112
  "zone_id",
112
113
  "name",
113
114
  "fqdn",
@@ -115,42 +116,61 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
115
116
  "value",
116
117
  "disable_ptr",
117
118
  "status",
119
+ "active",
118
120
  "description",
119
- name="Attributes",
121
+ name=_("Attributes"),
120
122
  ),
121
- FieldSet("tenant_group_id", "tenant_id", name="Tenancy"),
123
+ FieldSet("tenant_group_id", "tenant_id", name=_("Tenancy")),
122
124
  )
123
125
 
124
126
  type = forms.MultipleChoiceField(
125
127
  choices=RecordTypeChoices,
126
128
  required=False,
129
+ label=_("Type"),
127
130
  )
128
131
  name = forms.CharField(
129
132
  required=False,
133
+ label=_("Name"),
130
134
  )
131
135
  fqdn = forms.CharField(
132
136
  required=False,
133
- label="FQDN",
137
+ label=_("FQDN"),
134
138
  )
135
139
  value = forms.CharField(
136
140
  required=False,
141
+ label=_("Value"),
137
142
  )
138
143
  disable_ptr = forms.NullBooleanField(
139
144
  required=False,
140
- label="Disable PTR",
141
145
  widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
146
+ label=_("Disable PTR"),
142
147
  )
143
148
  status = forms.MultipleChoiceField(
144
149
  choices=RecordStatusChoices,
145
150
  required=False,
151
+ label=_("Status"),
152
+ )
153
+ view_id = DynamicModelMultipleChoiceField(
154
+ queryset=View.objects.all(),
155
+ required=False,
156
+ label=_("View"),
146
157
  )
147
158
  zone_id = DynamicModelMultipleChoiceField(
148
159
  queryset=Zone.objects.all(),
149
160
  required=False,
150
- label="Zone",
161
+ label=_("Zone"),
162
+ query_params={
163
+ "view_id": "$view_id",
164
+ },
165
+ )
166
+ active = forms.NullBooleanField(
167
+ required=False,
168
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
169
+ label=_("Active"),
151
170
  )
152
171
  description = forms.CharField(
153
172
  required=False,
173
+ label=_("Description"),
154
174
  )
155
175
  tag = TagFilterField(Record)
156
176
 
@@ -177,38 +197,37 @@ class RecordImportForm(NetBoxModelImportForm):
177
197
  queryset=Zone.objects.all(),
178
198
  to_field_name="name",
179
199
  required=True,
180
- help_text="Zone",
200
+ label=_("Zone"),
181
201
  )
182
202
  view = CSVModelChoiceField(
183
203
  queryset=View.objects.all(),
184
204
  to_field_name="name",
185
205
  required=False,
186
- help_text="View the zone belongs to",
206
+ label=_p("DNS", "View"),
187
207
  )
188
208
  type = CSVChoiceField(
189
209
  choices=RecordTypeChoices,
190
210
  required=True,
191
- help_text="Record Type",
211
+ label=_("Type"),
192
212
  )
193
213
  status = CSVChoiceField(
194
214
  choices=RecordStatusChoices,
195
215
  required=False,
196
- help_text="Record status",
216
+ label=_("Status"),
197
217
  )
198
218
  ttl = forms.IntegerField(
199
219
  required=False,
200
- help_text="TTL",
220
+ label=_("TTL"),
201
221
  )
202
222
  disable_ptr = forms.BooleanField(
203
223
  required=False,
204
- label="Disable PTR",
205
- help_text="Disable generation of a PTR record",
224
+ label=_("Disable PTR"),
206
225
  )
207
226
  tenant = CSVModelChoiceField(
208
227
  queryset=Tenant.objects.all(),
209
228
  to_field_name="name",
210
229
  required=False,
211
- help_text="Assigned tenant",
230
+ label=_("Tenant"),
212
231
  )
213
232
 
214
233
  def is_valid(self):
@@ -242,35 +261,45 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
242
261
  zone = DynamicModelChoiceField(
243
262
  queryset=Zone.objects.all(),
244
263
  required=False,
264
+ label=_("Zone"),
245
265
  )
246
266
  type = forms.ChoiceField(
247
267
  choices=add_blank_choice(RecordTypeChoices),
248
268
  required=False,
269
+ label=_("Type"),
249
270
  )
250
271
  value = forms.CharField(
251
272
  required=False,
252
- label="Value",
273
+ label=_("Value"),
253
274
  )
254
275
  status = forms.ChoiceField(
255
276
  choices=add_blank_choice(RecordStatusChoices),
256
277
  required=False,
278
+ label=_("Status"),
257
279
  )
258
280
  ttl = forms.IntegerField(
259
281
  required=False,
260
- label="TTL",
282
+ label=_("TTL"),
261
283
  )
262
284
  disable_ptr = forms.NullBooleanField(
263
285
  required=False,
264
- label="Disable PTR",
265
286
  widget=BulkEditNullBooleanSelect(),
287
+ label=_("Disable PTR"),
266
288
  )
267
289
  description = forms.CharField(
268
290
  max_length=200,
269
291
  required=False,
292
+ label=_("Description"),
293
+ )
294
+ tenant_group = DynamicModelChoiceField(
295
+ queryset=TenantGroup.objects.all(),
296
+ required=False,
297
+ label=_("Tenant Group"),
270
298
  )
271
299
  tenant = DynamicModelChoiceField(
272
300
  queryset=Tenant.objects.all(),
273
301
  required=False,
302
+ label=_("Tenant"),
274
303
  )
275
304
 
276
305
  fieldsets = (
@@ -282,8 +311,8 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
282
311
  "ttl",
283
312
  "disable_ptr",
284
313
  "description",
285
- name="Attributes",
314
+ name=_("Attributes"),
286
315
  ),
287
- FieldSet("tenant_group", "tenant", name="Tenancy"),
316
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
288
317
  )
289
318
  nullable_fields = ("description", "ttl", "tenant")