netbox-plugin-dns 1.1.2__py3-none-any.whl → 1.1.3__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 +6 -5
  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 +6 -4
  12. netbox_dns/fields/address.py +2 -1
  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 +10 -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 +43 -26
  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 +167 -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 +63 -30
  34. netbox_dns/models/record_template.py +16 -8
  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 +65 -43
  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 +9 -4
  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.3.dist-info}/METADATA +1 -1
  80. netbox_plugin_dns-1.1.3.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.3.dist-info}/LICENSE +0 -0
  83. {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.3.dist-info}/WHEEL +0 -0
  84. {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.3.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
@@ -49,7 +51,7 @@ class RecordForm(TenancyForm, NetBoxModelForm):
49
51
  view = DynamicModelChoiceField(
50
52
  queryset=View.objects.all(),
51
53
  required=False,
52
- label="View",
54
+ label=_p("DNS", "View"),
53
55
  )
54
56
  zone = DynamicModelChoiceField(
55
57
  queryset=Zone.objects.all(),
@@ -57,16 +59,16 @@ class RecordForm(TenancyForm, NetBoxModelForm):
57
59
  query_params={
58
60
  "view_id": "$view",
59
61
  },
60
- label="Zone",
62
+ label=_("Zone"),
61
63
  )
62
64
 
63
65
  disable_ptr = forms.BooleanField(
64
- label="Disable PTR",
65
66
  required=False,
67
+ label=_("Disable PTR"),
66
68
  )
67
69
  ttl = forms.IntegerField(
68
70
  required=False,
69
- label="TTL",
71
+ label=_("TTL"),
70
72
  )
71
73
 
72
74
  fieldsets = (
@@ -82,8 +84,8 @@ class RecordForm(TenancyForm, NetBoxModelForm):
82
84
  "description",
83
85
  name="Record",
84
86
  ),
85
- FieldSet("tenant_group", "tenant", name="Tenancy"),
86
- FieldSet("tags", name="Tags"),
87
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
88
+ FieldSet("tags", name=_("Tags")),
87
89
  )
88
90
 
89
91
  class Meta:
@@ -98,8 +100,9 @@ class RecordForm(TenancyForm, NetBoxModelForm):
98
100
  "ttl",
99
101
  "disable_ptr",
100
102
  "description",
101
- "tags",
103
+ "tenant_group",
102
104
  "tenant",
105
+ "tags",
103
106
  )
104
107
 
105
108
 
@@ -116,41 +119,46 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
116
119
  "disable_ptr",
117
120
  "status",
118
121
  "description",
119
- name="Attributes",
122
+ name=_("Attributes"),
120
123
  ),
121
- FieldSet("tenant_group_id", "tenant_id", name="Tenancy"),
124
+ FieldSet("tenant_group_id", "tenant_id", name=_("Tenancy")),
122
125
  )
123
126
 
124
127
  type = forms.MultipleChoiceField(
125
128
  choices=RecordTypeChoices,
126
129
  required=False,
130
+ label=_("Type"),
127
131
  )
128
132
  name = forms.CharField(
129
133
  required=False,
134
+ label=_("Name"),
130
135
  )
131
136
  fqdn = forms.CharField(
132
137
  required=False,
133
- label="FQDN",
138
+ label=_("FQDN"),
134
139
  )
135
140
  value = forms.CharField(
136
141
  required=False,
142
+ label=_("Value"),
137
143
  )
138
144
  disable_ptr = forms.NullBooleanField(
139
145
  required=False,
140
- label="Disable PTR",
141
146
  widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
147
+ label=_("Disable PTR"),
142
148
  )
143
149
  status = forms.MultipleChoiceField(
144
150
  choices=RecordStatusChoices,
145
151
  required=False,
152
+ label=_("Status"),
146
153
  )
147
154
  zone_id = DynamicModelMultipleChoiceField(
148
155
  queryset=Zone.objects.all(),
149
156
  required=False,
150
- label="Zone",
157
+ label=_("Zone"),
151
158
  )
152
159
  description = forms.CharField(
153
160
  required=False,
161
+ label=_("Description"),
154
162
  )
155
163
  tag = TagFilterField(Record)
156
164
 
@@ -177,38 +185,37 @@ class RecordImportForm(NetBoxModelImportForm):
177
185
  queryset=Zone.objects.all(),
178
186
  to_field_name="name",
179
187
  required=True,
180
- help_text="Zone",
188
+ label=_("Zone"),
181
189
  )
182
190
  view = CSVModelChoiceField(
183
191
  queryset=View.objects.all(),
184
192
  to_field_name="name",
185
193
  required=False,
186
- help_text="View the zone belongs to",
194
+ label=_p("DNS", "View"),
187
195
  )
188
196
  type = CSVChoiceField(
189
197
  choices=RecordTypeChoices,
190
198
  required=True,
191
- help_text="Record Type",
199
+ label=_("Type"),
192
200
  )
193
201
  status = CSVChoiceField(
194
202
  choices=RecordStatusChoices,
195
203
  required=False,
196
- help_text="Record status",
204
+ label=_("Status"),
197
205
  )
198
206
  ttl = forms.IntegerField(
199
207
  required=False,
200
- help_text="TTL",
208
+ label=_("TTL"),
201
209
  )
202
210
  disable_ptr = forms.BooleanField(
203
211
  required=False,
204
- label="Disable PTR",
205
- help_text="Disable generation of a PTR record",
212
+ label=_("Disable PTR"),
206
213
  )
207
214
  tenant = CSVModelChoiceField(
208
215
  queryset=Tenant.objects.all(),
209
216
  to_field_name="name",
210
217
  required=False,
211
- help_text="Assigned tenant",
218
+ label=_("Tenant"),
212
219
  )
213
220
 
214
221
  def is_valid(self):
@@ -242,35 +249,45 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
242
249
  zone = DynamicModelChoiceField(
243
250
  queryset=Zone.objects.all(),
244
251
  required=False,
252
+ label=_("Zone"),
245
253
  )
246
254
  type = forms.ChoiceField(
247
255
  choices=add_blank_choice(RecordTypeChoices),
248
256
  required=False,
257
+ label=_("Type"),
249
258
  )
250
259
  value = forms.CharField(
251
260
  required=False,
252
- label="Value",
261
+ label=_("Value"),
253
262
  )
254
263
  status = forms.ChoiceField(
255
264
  choices=add_blank_choice(RecordStatusChoices),
256
265
  required=False,
266
+ label=_("Status"),
257
267
  )
258
268
  ttl = forms.IntegerField(
259
269
  required=False,
260
- label="TTL",
270
+ label=_("TTL"),
261
271
  )
262
272
  disable_ptr = forms.NullBooleanField(
263
273
  required=False,
264
- label="Disable PTR",
265
274
  widget=BulkEditNullBooleanSelect(),
275
+ label=_("Disable PTR"),
266
276
  )
267
277
  description = forms.CharField(
268
278
  max_length=200,
269
279
  required=False,
280
+ label=_("Description"),
281
+ )
282
+ tenant_group = DynamicModelChoiceField(
283
+ queryset=TenantGroup.objects.all(),
284
+ required=False,
285
+ label=_("Tenant Group"),
270
286
  )
271
287
  tenant = DynamicModelChoiceField(
272
288
  queryset=Tenant.objects.all(),
273
289
  required=False,
290
+ label=_("Tenant"),
274
291
  )
275
292
 
276
293
  fieldsets = (
@@ -282,8 +299,8 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
282
299
  "ttl",
283
300
  "disable_ptr",
284
301
  "description",
285
- name="Attributes",
302
+ name=_("Attributes"),
286
303
  ),
287
- FieldSet("tenant_group", "tenant", name="Tenancy"),
304
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
288
305
  )
289
306
  nullable_fields = ("description", "ttl", "tenant")