netbox-plugin-dns 1.1.3__tar.gz → 1.1.5__tar.gz

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 (158) hide show
  1. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/PKG-INFO +3 -2
  2. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/README.md +2 -1
  3. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/__init__.py +26 -5
  4. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/views.py +1 -1
  5. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/choices/zone.py +2 -0
  6. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/address.py +3 -21
  7. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/record.py +3 -0
  8. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/zone.py +1 -2
  9. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/record.py +29 -13
  10. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/view.py +2 -3
  11. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/zone.py +15 -10
  12. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/zone_template.py +5 -5
  13. netbox_plugin_dns-1.1.5/netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  14. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/nameserver.py +4 -8
  15. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/record.py +26 -41
  16. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/record_template.py +5 -5
  17. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/view.py +2 -3
  18. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/zone.py +96 -39
  19. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/signals/ipam_dnssync.py +1 -1
  20. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/record.py +14 -2
  21. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/zone.py +1 -2
  22. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/template_content.py +16 -0
  23. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/record.html +12 -0
  24. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view.html +1 -1
  25. netbox_plugin_dns-1.1.5/netbox_dns/templates/netbox_dns/zone/delegation_record.html +18 -0
  26. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone.html +1 -1
  27. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/utilities/__init__.py +1 -0
  28. netbox_plugin_dns-1.1.5/netbox_dns/utilities/dns.py +12 -0
  29. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/utilities/ipam_dnssync.py +10 -13
  30. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/dns_value.py +47 -6
  31. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/nameserver.py +3 -3
  32. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/record.py +44 -11
  33. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/registrar.py +1 -1
  34. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/registration_contact.py +1 -1
  35. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/view.py +2 -2
  36. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/zone.py +49 -20
  37. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/PKG-INFO +3 -2
  38. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/SOURCES.txt +2 -0
  39. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/pyproject.toml +1 -1
  40. netbox_plugin_dns-1.1.3/netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  41. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/LICENSE +0 -0
  42. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/nested_serializers.py +0 -0
  43. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers.py +0 -0
  44. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/__init__.py +0 -0
  45. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/nameserver.py +0 -0
  46. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/prefix.py +0 -0
  47. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/record.py +0 -0
  48. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/record_template.py +0 -0
  49. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/registrar.py +0 -0
  50. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/registration_contact.py +0 -0
  51. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/view.py +0 -0
  52. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/zone.py +0 -0
  53. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/zone_template.py +0 -0
  54. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/urls.py +0 -0
  55. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/apps.py +0 -0
  56. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/choices/__init__.py +0 -0
  57. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/choices/record.py +0 -0
  58. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/__init__.py +0 -0
  59. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/ipam.py +0 -0
  60. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/network.py +0 -0
  61. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/rfc2317.py +0 -0
  62. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/__init__.py +0 -0
  63. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/nameserver.py +0 -0
  64. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/record_template.py +0 -0
  65. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/registrar.py +0 -0
  66. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/registration_contact.py +0 -0
  67. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/view.py +0 -0
  68. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/zone_template.py +0 -0
  69. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/__init__.py +0 -0
  70. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/nameserver.py +0 -0
  71. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/record_template.py +0 -0
  72. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/registrar.py +0 -0
  73. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/registration_contact.py +0 -0
  74. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/__init__.py +0 -0
  75. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/filters.py +0 -0
  76. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/schema.py +0 -0
  77. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/types.py +0 -0
  78. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
  79. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/cleanup_database.py +0 -0
  80. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/cleanup_rrset_ttl.py +0 -0
  81. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/rebuild_dnssync.py +0 -0
  82. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/setup_dnssync.py +0 -0
  83. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/update_soa.py +0 -0
  84. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -0
  85. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +0 -0
  86. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0002_contact_description_registrar_description.py +0 -0
  87. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0003_default_view.py +0 -0
  88. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0004_create_and_assign_default_view.py +0 -0
  89. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0005_alter_zone_view_not_null.py +0 -0
  90. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0006_templating.py +0 -0
  91. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0007_alter_ordering_options.py +0 -0
  92. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0008_view_prefixes.py +0 -0
  93. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0009_rename_contact_registrationcontact.py +0 -0
  94. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0010_view_ip_address_filter.py +0 -0
  95. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0020_netbox_3_4.py +0 -0
  96. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0021_record_ip_address.py +0 -0
  97. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0022_search.py +0 -0
  98. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0023_alter_record_value.py +0 -0
  99. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0024_tenancy.py +0 -0
  100. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0025_ipam_coupling_cf.py +0 -0
  101. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0026_domain_registration.py +0 -0
  102. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0027_alter_registrar_iana_id.py +0 -0
  103. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0028_rfc2317_fields.py +0 -0
  104. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0029_record_fqdn.py +0 -0
  105. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/__init__.py +0 -0
  106. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/mixins/__init__.py +0 -0
  107. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/mixins/object_modification.py +0 -0
  108. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/__init__.py +0 -0
  109. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/registrar.py +0 -0
  110. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/registration_contact.py +0 -0
  111. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/zone_template.py +0 -0
  112. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/navigation.py +0 -0
  113. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/signals/__init__.py +0 -0
  114. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/__init__.py +0 -0
  115. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/ipam_dnssync.py +0 -0
  116. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/nameserver.py +0 -0
  117. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/record_template.py +0 -0
  118. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/registrar.py +0 -0
  119. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/registration_contact.py +0 -0
  120. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/view.py +0 -0
  121. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/zone_template.py +0 -0
  122. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/nameserver.html +0 -0
  123. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/record/managed.html +0 -0
  124. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/record/related.html +0 -0
  125. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/recordtemplate.html +0 -0
  126. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/registrar.html +0 -0
  127. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/registrationcontact.html +0 -0
  128. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view/button.html +0 -0
  129. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view/prefix.html +0 -0
  130. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view/related.html +0 -0
  131. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/base.html +0 -0
  132. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/child.html +0 -0
  133. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/child_zone.html +0 -0
  134. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/managed_record.html +0 -0
  135. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/record.html +0 -0
  136. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/registration.html +0 -0
  137. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +0 -0
  138. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zonetemplate.html +0 -0
  139. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/__init__.py +0 -0
  140. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/nameserver.py +0 -0
  141. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/record.py +0 -0
  142. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/record_template.py +0 -0
  143. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/registrar.py +0 -0
  144. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/registration_contact.py +0 -0
  145. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/view.py +0 -0
  146. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/zone.py +0 -0
  147. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/zone_template.py +0 -0
  148. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/utilities/conversions.py +0 -0
  149. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/__init__.py +0 -0
  150. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/dns_name.py +0 -0
  151. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/rfc2317.py +0 -0
  152. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/__init__.py +0 -0
  153. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/record_template.py +0 -0
  154. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/zone_template.py +0 -0
  155. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/dependency_links.txt +0 -0
  156. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/requires.txt +0 -0
  157. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/top_level.txt +0 -0
  158. {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: netbox-plugin-dns
3
- Version: 1.1.3
3
+ Version: 1.1.5
4
4
  Summary: NetBox DNS is a NetBox plugin for managing DNS data.
5
5
  Author-email: Peter Eckel <pete@netbox-dns.org>
6
6
  Project-URL: Homepage, https://github.com/peteeckel/netbox-plugin-dns
@@ -25,6 +25,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
25
25
  <a href="https://github.com/peteeckel/netbox-plugin-dns/pulls"><img src="https://img.shields.io/github/issues-pr/peteeckel/netbox-plugin-dns" alt="Pull Requests Badge"/></a>
26
26
  <a href="https://github.com/peteeckel/netbox-plugin-dns/graphs/contributors"><img alt="GitHub contributors" src="https://img.shields.io/github/contributors/peteeckel/netbox-plugin-dns?color=2b9348"></a>
27
27
  <a href="https://github.com/peteeckel/netbox-plugin-dns/blob/master/LICENSE"><img src="https://img.shields.io/github/license/peteeckel/netbox-plugin-dns?color=2b9348" alt="License Badge"/></a>
28
+ <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style Black"/></a>
28
29
  <a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads" src="https://static.pepy.tech/badge/netbox-plugin-dns"></a>
29
30
  <a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Week" src="https://static.pepy.tech/badge/netbox-plugin-dns/month"></a>
30
31
  <a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Month" src="https://static.pepy.tech/badge/netbox-plugin-dns/week"></a>
@@ -32,7 +33,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
32
33
 
33
34
  > [!WARNING]
34
35
  > **As a result of some issues with NetBox Branching still under investigation, NetBox DNS is currently not compatible with the new NetBox Branching plugin.**
35
- > This affects multiple aspects of the branching functionality, and currently (netboxlabs-branching-plugin version 0.4.0) there is no workaround. Do not try to use NetBox Branching together with NetBox DNS until these issues are resolved.
36
+ > This affects multiple aspects of the branching functionality, and currently there is no workaround. Do not try to use NetBox Branching together with NetBox DNS until these issues are resolved.
36
37
  > This warning will be updated as soon as the situation is resolved.
37
38
 
38
39
  ## Objectives
@@ -9,6 +9,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
9
9
  <a href="https://github.com/peteeckel/netbox-plugin-dns/pulls"><img src="https://img.shields.io/github/issues-pr/peteeckel/netbox-plugin-dns" alt="Pull Requests Badge"/></a>
10
10
  <a href="https://github.com/peteeckel/netbox-plugin-dns/graphs/contributors"><img alt="GitHub contributors" src="https://img.shields.io/github/contributors/peteeckel/netbox-plugin-dns?color=2b9348"></a>
11
11
  <a href="https://github.com/peteeckel/netbox-plugin-dns/blob/master/LICENSE"><img src="https://img.shields.io/github/license/peteeckel/netbox-plugin-dns?color=2b9348" alt="License Badge"/></a>
12
+ <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style Black"/></a>
12
13
  <a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads" src="https://static.pepy.tech/badge/netbox-plugin-dns"></a>
13
14
  <a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Week" src="https://static.pepy.tech/badge/netbox-plugin-dns/month"></a>
14
15
  <a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Month" src="https://static.pepy.tech/badge/netbox-plugin-dns/week"></a>
@@ -16,7 +17,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
16
17
 
17
18
  > [!WARNING]
18
19
  > **As a result of some issues with NetBox Branching still under investigation, NetBox DNS is currently not compatible with the new NetBox Branching plugin.**
19
- > This affects multiple aspects of the branching functionality, and currently (netboxlabs-branching-plugin version 0.4.0) there is no workaround. Do not try to use NetBox Branching together with NetBox DNS until these issues are resolved.
20
+ > This affects multiple aspects of the branching functionality, and currently there is no workaround. Do not try to use NetBox Branching together with NetBox DNS until these issues are resolved.
20
21
  > This warning will be updated as soon as the situation is resolved.
21
22
 
22
23
  ## Objectives
@@ -1,12 +1,18 @@
1
- from django.conf import settings
2
1
  from django.utils.translation import gettext_lazy as _
2
+ from django.core.exceptions import ImproperlyConfigured
3
3
 
4
4
  from netbox.plugins import PluginConfig
5
+ from netbox.plugins.utils import get_plugin_config
5
6
  from ipam.choices import IPAddressStatusChoices
6
7
 
7
- from netbox_dns.choices import RecordTypeChoices
8
+ from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices, ZoneStatusChoices
8
9
 
9
- __version__ = "1.1.3"
10
+ __version__ = "1.1.5"
11
+
12
+
13
+ def _check_list(setting):
14
+ if not isinstance(get_plugin_config("netbox_dns", setting), list):
15
+ raise ImproperlyConfigured(f"{setting} must be a list")
10
16
 
11
17
 
12
18
  class DNSConfig(PluginConfig):
@@ -26,6 +32,13 @@ class DNSConfig(PluginConfig):
26
32
  "zone_soa_retry": 7200,
27
33
  "zone_soa_expire": 2419200,
28
34
  "zone_soa_minimum": 3600,
35
+ "zone_active_status": [
36
+ ZoneStatusChoices.STATUS_ACTIVE,
37
+ ZoneStatusChoices.STATUS_DYNAMIC,
38
+ ],
39
+ "record_active_status": [
40
+ RecordStatusChoices.STATUS_ACTIVE,
41
+ ],
29
42
  "dnssync_disabled": False,
30
43
  "dnssync_ipaddress_active_status": [
31
44
  IPAddressStatusChoices.STATUS_ACTIVE,
@@ -46,7 +59,7 @@ class DNSConfig(PluginConfig):
46
59
  "enable_root_zones": False,
47
60
  "enforce_unique_records": True,
48
61
  "enforce_unique_rrset_ttl": True,
49
- "menu_name": "NetBox DNS",
62
+ "menu_name": "DNS",
50
63
  "top_level_menu": True,
51
64
  }
52
65
  base_url = "netbox-dns"
@@ -54,10 +67,18 @@ class DNSConfig(PluginConfig):
54
67
  def ready(self):
55
68
  super().ready()
56
69
 
57
- if not settings.PLUGINS_CONFIG["netbox_dns"].get("dnssync_disabled"):
70
+ if not get_plugin_config("netbox_dns", "dnssync_disabled"):
58
71
  import netbox_dns.signals.ipam_dnssync # noqa: F401
59
72
  import netbox_dns.tables.ipam_dnssync # noqa: F401
60
73
 
74
+ for setting in (
75
+ "zone_active_status",
76
+ "record_active_status",
77
+ "dnssync_ipaddress_active_status",
78
+ "tolerate_leading_underscore_types",
79
+ ):
80
+ _check_list(setting)
81
+
61
82
 
62
83
  #
63
84
  # Initialize plugin config
@@ -71,7 +71,7 @@ class NameServerViewSet(NetBoxModelViewSet):
71
71
 
72
72
 
73
73
  class RecordViewSet(NetBoxModelViewSet):
74
- queryset = Record.objects.all().prefetch_related("zone", "zone__view", "tenant")
74
+ queryset = Record.objects.prefetch_related("zone", "zone__view", "tenant")
75
75
  serializer_class = RecordSerializer
76
76
  filterset_class = RecordFilterSet
77
77
 
@@ -13,10 +13,12 @@ class ZoneStatusChoices(ChoiceSet):
13
13
  STATUS_RESERVED = "reserved"
14
14
  STATUS_DEPRECATED = "deprecated"
15
15
  STATUS_PARKED = "parked"
16
+ STATUS_DYNAMIC = "dynamic"
16
17
 
17
18
  CHOICES = [
18
19
  (STATUS_ACTIVE, _("Active"), "blue"),
19
20
  (STATUS_RESERVED, _("Reserved"), "cyan"),
20
21
  (STATUS_DEPRECATED, _("Deprecated"), "red"),
21
22
  (STATUS_PARKED, _("Parked"), "gray"),
23
+ (STATUS_DYNAMIC, _("Dynamic"), "orange"),
22
24
  ]
@@ -1,31 +1,13 @@
1
- from django import forms
2
1
  from django.db import models
3
2
  from django.core.exceptions import ValidationError
4
3
  from django.utils.translation import gettext_lazy as _
5
4
 
6
5
  from netaddr import AddrFormatError, IPAddress
7
6
 
7
+ from ipam.formfields import IPAddressFormField
8
8
 
9
- __all__ = (
10
- "AddressFormField",
11
- "AddressField",
12
- )
13
9
 
14
-
15
- class AddressFormField(forms.Field):
16
- def to_python(self, value):
17
- if not value:
18
- return None
19
-
20
- if isinstance(value, IPAddress):
21
- return value
22
-
23
- try:
24
- ip_address = IPAddress(value)
25
- except AddrFormatError as exc:
26
- raise ValidationError(exc)
27
-
28
- return ip_address
10
+ __all__ = ("AddressField",)
29
11
 
30
12
 
31
13
  class AddressField(models.Field):
@@ -58,7 +40,7 @@ class AddressField(models.Field):
58
40
  return str(self.to_python(value))
59
41
 
60
42
  def form_class(self):
61
- return AddressFormField
43
+ return IPAddressFormField
62
44
 
63
45
  def formfield(self, **kwargs):
64
46
  defaults = {"form_class": self.form_class()}
@@ -76,6 +76,9 @@ class RecordFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
76
76
  method="filter_ip_address",
77
77
  label=_("IP Address"),
78
78
  )
79
+ active = django_filters.BooleanFilter(
80
+ label=_("Record is active"),
81
+ )
79
82
 
80
83
  managed = django_filters.BooleanFilter()
81
84
 
@@ -3,7 +3,6 @@ import netaddr
3
3
  import django_filters
4
4
  from django.db.models import Q
5
5
  from django.utils.translation import gettext as _
6
- from django.utils.translation import pgettext as _p
7
6
 
8
7
  from netbox.filtersets import NetBoxModelFilterSet
9
8
  from tenancy.filtersets import TenancyFilterSet
@@ -28,7 +27,7 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
28
27
  queryset=View.objects.all(),
29
28
  field_name="view__name",
30
29
  to_field_name="name",
31
- label=_p("DNS", "View"),
30
+ label=_("View"),
32
31
  )
33
32
  # DEPRECATED: Remove in 1.1
34
33
  name_server_id = django_filters.ModelMultipleChoiceFilter(
@@ -1,6 +1,5 @@
1
1
  from django import forms
2
2
  from django.utils.translation import gettext_lazy as _
3
- from django.utils.translation import pgettext_lazy as _p
4
3
 
5
4
  from netbox.forms import (
6
5
  NetBoxModelBulkEditForm,
@@ -38,12 +37,6 @@ class RecordForm(TenancyForm, NetBoxModelForm):
38
37
  def __init__(self, *args, **kwargs):
39
38
  super().__init__(*args, **kwargs)
40
39
 
41
- initial_zone_id = self.initial.get("zone")
42
- if initial_zone_id is not None:
43
- self.initial["view"] = Zone.objects.get(pk=initial_zone_id).view
44
- else:
45
- self.initial["view"] = View.get_default_view()
46
-
47
40
  initial_name = self.initial.get("name")
48
41
  if initial_name:
49
42
  self.initial["name"] = name_to_unicode(initial_name)
@@ -51,7 +44,10 @@ class RecordForm(TenancyForm, NetBoxModelForm):
51
44
  view = DynamicModelChoiceField(
52
45
  queryset=View.objects.all(),
53
46
  required=False,
54
- label=_p("DNS", "View"),
47
+ initial_params={
48
+ "zone": "$zone",
49
+ },
50
+ label=_("View"),
55
51
  )
56
52
  zone = DynamicModelChoiceField(
57
53
  queryset=Zone.objects.all(),
@@ -111,6 +107,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
111
107
  fieldsets = (
112
108
  FieldSet("q", "filter_id", "tag"),
113
109
  FieldSet(
110
+ "view_id",
114
111
  "zone_id",
115
112
  "name",
116
113
  "fqdn",
@@ -118,6 +115,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
118
115
  "value",
119
116
  "disable_ptr",
120
117
  "status",
118
+ "active",
121
119
  "description",
122
120
  name=_("Attributes"),
123
121
  ),
@@ -151,10 +149,23 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
151
149
  required=False,
152
150
  label=_("Status"),
153
151
  )
152
+ view_id = DynamicModelMultipleChoiceField(
153
+ queryset=View.objects.all(),
154
+ required=False,
155
+ label=_("View"),
156
+ )
154
157
  zone_id = DynamicModelMultipleChoiceField(
155
158
  queryset=Zone.objects.all(),
156
159
  required=False,
157
160
  label=_("Zone"),
161
+ query_params={
162
+ "view_id": "$view_id",
163
+ },
164
+ )
165
+ active = forms.NullBooleanField(
166
+ required=False,
167
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
168
+ label=_("Active"),
158
169
  )
159
170
  description = forms.CharField(
160
171
  required=False,
@@ -175,23 +186,28 @@ class RecordImportForm(NetBoxModelImportForm):
175
186
  pass
176
187
 
177
188
  if view is not None:
178
- self.fields["zone"].queryset = Zone.objects.filter(view=view)
189
+ self.fields["zone"].queryset = view.zone_set
179
190
  else:
180
- self.fields["zone"].queryset = Zone.objects.filter(
181
- view=View.get_default_view()
182
- )
191
+ self.fields["zone"].queryset = View.get_default_view().zone_set
183
192
 
184
193
  zone = CSVModelChoiceField(
185
194
  queryset=Zone.objects.all(),
186
195
  to_field_name="name",
187
196
  required=True,
188
197
  label=_("Zone"),
198
+ error_messages={
199
+ "invalid_choice": _("Zone %(value)s not found"),
200
+ },
189
201
  )
190
202
  view = CSVModelChoiceField(
191
203
  queryset=View.objects.all(),
192
204
  to_field_name="name",
193
205
  required=False,
194
- label=_p("DNS", "View"),
206
+ label=_("View"),
207
+ error_messages={
208
+ "invalid_choice": _("View %(value)s not found"),
209
+ },
210
+ help_text=_("This field is required if the zone is not in the default view"),
195
211
  )
196
212
  type = CSVChoiceField(
197
213
  choices=RecordTypeChoices,
@@ -3,7 +3,6 @@ from django.conf import settings
3
3
  from django.core.exceptions import ValidationError, FieldError
4
4
  from django.db.models import Q, Count
5
5
  from django.utils.translation import gettext_lazy as _
6
- from django.utils.translation import pgettext_lazy as _p
7
6
 
8
7
  from netbox.forms import (
9
8
  NetBoxModelBulkEditForm,
@@ -127,7 +126,7 @@ class ViewForm(ViewPrefixUpdateMixin, TenancyForm, NetBoxModelForm):
127
126
  )
128
127
 
129
128
  fieldsets = (
130
- FieldSet("name", "default_view", "description", name=_p("DNS", "View")),
129
+ FieldSet("name", "default_view", "description", name=_("View")),
131
130
  FieldSet("prefixes", "ip_address_filter"),
132
131
  FieldSet("tenant_group", "tenant", name=_("Tenancy")),
133
132
  FieldSet("tags", name=_("Tags")),
@@ -302,7 +301,7 @@ class ViewPrefixEditForm(forms.ModelForm):
302
301
 
303
302
  if not views.exists():
304
303
  if (parent := prefix.get_parents().last()) is not None:
305
- check_views = parent.netbox_dns_views.all().difference(old_views)
304
+ check_views = parent.netbox_dns_views.difference(old_views)
306
305
 
307
306
  else:
308
307
  check_views = views.difference(old_views)
@@ -4,7 +4,6 @@ from django.conf import settings
4
4
  from django.core.validators import MinValueValidator, MaxValueValidator
5
5
  from django.core.exceptions import ValidationError
6
6
  from django.utils.translation import gettext_lazy as _
7
- from django.utils.translation import pgettext_lazy as _p
8
7
 
9
8
  from netbox.forms import (
10
9
  NetBoxModelBulkEditForm,
@@ -354,6 +353,7 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
354
353
  "status",
355
354
  "name",
356
355
  "nameserver_id",
356
+ "active",
357
357
  "description",
358
358
  name=_("Attributes"),
359
359
  ),
@@ -384,7 +384,7 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
384
384
  view_id = DynamicModelMultipleChoiceField(
385
385
  queryset=View.objects.all(),
386
386
  required=False,
387
- label=_p("DNS", "View"),
387
+ label=_("View"),
388
388
  )
389
389
  status = forms.MultipleChoiceField(
390
390
  choices=ZoneStatusChoices,
@@ -400,6 +400,11 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
400
400
  required=False,
401
401
  label=_("Nameservers"),
402
402
  )
403
+ active = forms.NullBooleanField(
404
+ required=False,
405
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
406
+ label=_("Active"),
407
+ )
403
408
  description = forms.CharField(
404
409
  required=False,
405
410
  label=_("Description"),
@@ -470,7 +475,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
470
475
  required=False,
471
476
  to_field_name="name",
472
477
  error_messages={
473
- "invalid_choice": _("View not found."),
478
+ "invalid_choice": _("View %(value)s not found"),
474
479
  },
475
480
  label=_("View"),
476
481
  )
@@ -499,7 +504,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
499
504
  required=False,
500
505
  to_field_name="name",
501
506
  error_messages={
502
- "invalid_choice": _("Nameserver not found."),
507
+ "invalid_choice": _("Nameserver %(value)s not found"),
503
508
  },
504
509
  help_text=_("Primary nameserver for the zone"),
505
510
  label=_("SOA MName"),
@@ -554,7 +559,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
554
559
  required=False,
555
560
  to_field_name="name",
556
561
  error_messages={
557
- "invalid_choice": _("Registrar not found."),
562
+ "invalid_choice": _("Registrar %(value)s not found"),
558
563
  },
559
564
  label=_("Registrar"),
560
565
  )
@@ -567,7 +572,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
567
572
  required=False,
568
573
  to_field_name="contact_id",
569
574
  error_messages={
570
- "invalid_choice": _("Registrant contact ID not found"),
575
+ "invalid_choice": _("Registrant contact ID %(value)s not found"),
571
576
  },
572
577
  label=_("Registrant"),
573
578
  )
@@ -576,7 +581,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
576
581
  required=False,
577
582
  to_field_name="contact_id",
578
583
  error_messages={
579
- "invalid_choice": _("Administrative contact ID not found"),
584
+ "invalid_choice": _("Administrative contact ID %(value)s not found"),
580
585
  },
581
586
  label=_("Administrative Contact"),
582
587
  )
@@ -585,7 +590,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
585
590
  required=False,
586
591
  to_field_name="contact_id",
587
592
  error_messages={
588
- "invalid_choice": _("Technical contact ID not found"),
593
+ "invalid_choice": _("Technical contact ID %(value)s not found"),
589
594
  },
590
595
  label=_("Technical Contact"),
591
596
  )
@@ -669,7 +674,7 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
669
674
  view = DynamicModelChoiceField(
670
675
  queryset=View.objects.all(),
671
676
  required=False,
672
- label=_p("DNS", "View"),
677
+ label=_("View"),
673
678
  )
674
679
  status = forms.ChoiceField(
675
680
  choices=add_blank_choice(ZoneStatusChoices),
@@ -781,7 +786,7 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
781
786
  tenant_group = DynamicModelChoiceField(
782
787
  queryset=TenantGroup.objects.all(),
783
788
  required=False,
784
- label=_("Tenant"),
789
+ label=_("Tenant Group"),
785
790
  )
786
791
  tenant = DynamicModelChoiceField(
787
792
  queryset=Tenant.objects.all(),
@@ -159,7 +159,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
159
159
  required=False,
160
160
  to_field_name="name",
161
161
  error_messages={
162
- "invalid_choice": _("Registrar not found."),
162
+ "invalid_choice": _("Registrar %(value)s not found"),
163
163
  },
164
164
  label=_("Registrar"),
165
165
  )
@@ -168,7 +168,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
168
168
  required=False,
169
169
  to_field_name="contact_id",
170
170
  error_messages={
171
- "invalid_choice": _("Registrant contact ID not found"),
171
+ "invalid_choice": _("Registrant contact ID %(value)s not found"),
172
172
  },
173
173
  label=_("Registrant"),
174
174
  )
@@ -177,7 +177,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
177
177
  required=False,
178
178
  to_field_name="contact_id",
179
179
  error_messages={
180
- "invalid_choice": _("Administrative contact ID not found"),
180
+ "invalid_choice": _("Administrative contact ID %(value)s not found"),
181
181
  },
182
182
  label=_("Administrative Contact"),
183
183
  )
@@ -186,7 +186,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
186
186
  required=False,
187
187
  to_field_name="contact_id",
188
188
  error_messages={
189
- "invalid_choice": _("Technical contact ID not found"),
189
+ "invalid_choice": _("Technical contact ID %(value)s not found"),
190
190
  },
191
191
  label=_("Technical Contact"),
192
192
  )
@@ -195,7 +195,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
195
195
  required=False,
196
196
  to_field_name="contact_id",
197
197
  error_messages={
198
- "invalid_choice": _("Billing contact ID not found"),
198
+ "invalid_choice": _("Billing contact ID %(value)s not found"),
199
199
  },
200
200
  label=_("Billing Contact"),
201
201
  )
@@ -19,8 +19,6 @@ from netbox_dns.choices import RecordTypeChoices
19
19
  from netbox_dns.validators import validate_fqdn
20
20
  from netbox_dns.mixins import ObjectModificationMixin
21
21
 
22
- from .record import Record
23
-
24
22
 
25
23
  __all__ = (
26
24
  "NameServer",
@@ -80,7 +78,7 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
80
78
  {
81
79
  "name": str(exc),
82
80
  }
83
- ) from None
81
+ )
84
82
 
85
83
  try:
86
84
  validate_fqdn(self.name)
@@ -89,7 +87,7 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
89
87
  {
90
88
  "name": exc,
91
89
  }
92
- ) from None
90
+ )
93
91
 
94
92
  super().clean(*args, **kwargs)
95
93
 
@@ -112,10 +110,8 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
112
110
 
113
111
  def delete(self, *args, **kwargs):
114
112
  with transaction.atomic():
115
- zones = self.zones.all()
116
- for zone in zones:
117
- Record.objects.filter(
118
- Q(zone=zone),
113
+ for zone in self.zones.all():
114
+ zone.record_set.filter(
119
115
  Q(managed=True),
120
116
  Q(value=f"{self.name}."),
121
117
  Q(type=RecordTypeChoices.NS),