Compare commits

...

459 Commits

Author SHA1 Message Date
Jeremy Stretch
71e6ea5785 Release v4.3.3 2025-06-26 14:42:03 -04:00
Jason Novinger
0a9887b42f Fixes #19745: properly check IP assignment to FHRPGroup
- Expands the logic in ServiceImportForm.clean() to handle properly
  validation of FHRPGroup assignments and maintain the existing
  [VM]Interface validation checks.
- Includes an extension to ServiceTestCase.csv_data to act as a
  regression test for this behavior.
2025-06-26 12:09:14 -04:00
Tobias Genannt
3ecf29d797 Fixes #17719: User settings for table stripe (#19526)
* Fixes #17719: User setting table stripe

* Tweak user preference name

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-06-26 12:03:17 -04:00
Jason Novinger
c48e4f590e Fixes #19640: restores device/vm FHRPGroupAssignment graphql filters (#19712)
* Fixes #19640: restores device/vm FHRPGroupAssignment graphql filters

* Add docstring for device_filter helper function
2025-06-26 12:00:56 -04:00
github-actions
aee83a434a Update source translation strings 2025-06-26 05:02:35 +00:00
Arthur Hanson
a17699d261 19644 Make atomic use correct database instead of default (#19651)
* 19644 set atomic transactions to appropriate database

* 19644 set atomic transactions for Job Script run

* 19644 set atomic transactions to appropriate database

* 19644 set atomic transactions to appropriate database

* 19644 fix review comments

* 19644 fix review comments
2025-06-25 15:00:26 -04:00
Jeremy Stretch
f97d07a11c Update README & contributing guide (#19727) 2025-06-20 07:56:45 -07:00
github-actions
1fd3d390ae Update source translation strings 2025-06-20 05:02:37 +00:00
Omripresent
7dab7d730d Fixes: #19492: Add Save Button to Script Output Window (#19721)
* Add condition to ScriptResultView.get function to generate a download
file of job output if job is completed

* Update template script_result.html adding a download button to trigger
output download in ScriptResultView.get

* Simplify conditional logic; tweak timestamp format

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-06-19 13:31:54 -04:00
Jason Novinger
c660f1c019 Fixes #19702: add NotificationGroup.event_rules GenericRelation
The collector we use to notify users about dependent object that will be
deleted does handle GFKs. However, a GenericRelation must be set up on
the other end.
2025-06-19 09:41:40 -04:00
github-actions
334b45f55a Update source translation strings 2025-06-17 05:02:05 +00:00
Martin Hauser
e6c1cebd34 Closes #19499 - Add WirelessLink Bulk Import Support by Device and Interface Names (#19679) 2025-06-16 11:19:56 -07:00
Arthur Hanson
a9af541e81 Fixes #19529: fix CLI running of scripts (#19698)
* 19529 fix custom script path

* 19529 fix custom script path

* 19529 fix custom script path

* 19529 fix custom script path

* 19680 add object_change migrator

* 19680 optimize migration

* 19680 optimize migration
2025-06-16 07:17:38 -05:00
github-actions
f706572113 Update source translation strings 2025-06-14 05:02:08 +00:00
Arthur Hanson
6a6286777c Fixes #19680 fix deletion dependency order for GenericRelations (#19681)
* #19680 fix deletion dependency order for GenericRelations

* 19680 add test

* 19680 fix Collector and test

* 19680 put on changeloggingmixin

* 19680 cleanup

* 19680 cleanup

* 19680 cleanup

* 19680 skip changelog update for deleted objects

* 19680 remove print
2025-06-13 16:08:59 -05:00
Omripresent
afeddee10d Fixes #19687: Treat cellular interface type as not connectable (#19691)
* Add cellular interface types to WIRELESS_IFACE_TYPES const
Add cable termination test for cellular interface

* Add regression tag to cellular test
2025-06-12 09:49:09 -05:00
Arthur Hanson
a48bee2a2e 19555 fix script API validation for scheduled_at (#19693)
* 19555 fix script API validation for scheduled_at

* 19555 fix script API validation for scheduled_at
2025-06-11 12:41:45 -05:00
github-actions
b9db6ebd63 Update source translation strings 2025-06-11 05:02:55 +00:00
Martin Hauser
9e0493c64c Closes #17183 - Add Object Types Field to Tag Bulk Import Form (#19639) 2025-06-10 09:13:59 -07:00
hblandford
e3509c092a Closes #19684: Update pyproject.toml version to 4.3.2 (#19688)
Co-authored-by: Hugh Blandford <hugh.blandford@gmail.com>
2025-06-10 09:56:55 -05:00
bctiemann
762cfc7d10 Merge pull request #19672 from netbox-community/19659-service-form-initial-data
Fixes #19659: Populate initial device/VM selection for "add a service" button
2025-06-10 08:49:23 -04:00
bctiemann
522f80ed9d Merge pull request #19642 from pheus/17420-add-plugins-content-type-removal-instructions
Closes #17420 - Add Instructions for Cleaning up Content Types after Uninstalling a Plugin
2025-06-10 08:39:16 -04:00
github-actions
fd6062de75 Update source translation strings 2025-06-10 05:02:15 +00:00
gizmonicus
c872cce59f Fixes: #19616: configuration_example.py has inaccurate STORAGE_BACKEND examples (#19657) 2025-06-09 11:14:52 -07:00
Jeremy Stretch
dc8267d890 Fixes #19673: Ignore custom field references when compiling table prefetches (#19674) 2025-06-09 11:12:48 -07:00
Aaron
2bfb9f4ed0 Fixes #19617: Inconsistent styling of Connect buttons (#19682) 2025-06-09 10:21:28 -04:00
Martin Hauser
dda0a55e5e fix(ipam): Correct usage of the queryset.none method (#19678)
Ensures the `queryset.none()` method is called properly with
parentheses. This fixes a potential issue where the method would not
execute as intended, improving the stability and correctness of the
filter logic.
2025-06-09 07:45:40 -05:00
Martin Hauser
2680f855ff fix(wireless): Correct validation error field reference
Fixes the reference from `interface_a` to `interface_b` in the
validation error message for WirelessLink. Ensures the correct field is
indicated during validation errors.
2025-06-06 15:27:06 -04:00
Jeremy Stretch
6ca791850a Closes #19668: Remove obsolete docs publication step from release checklist (#19675) 2025-06-06 13:26:43 -05:00
Jeremy Stretch
43df06f210 Fixes #19667: Fix TypeError exception when creating a new module profile type with no schema (#19671) 2025-06-06 13:25:19 -05:00
Jeremy Stretch
7e6b1bbd79 Fixes #19659: Populate initial device/VM selection for 'add a service' button 2025-06-06 12:26:05 -04:00
Jeremy Stretch
0e68901022 Release v4.3.2 (#19656)
* Release v4.3.2

* Correct strawberry-graphql version
2025-06-05 15:56:06 -04:00
Jeremy Stretch
179c06ec20 Closes #19627: Object change migrators (#19628)
* Initial work on ObjectChange data migrations

* Fix migration bug

* Add migrators for MAC address assignments

* Update reverting kwarg; allow pop() to fail

* Cross-reference MAC address migrators

* Split migrator logic across migrations

* Add missing migrator
2025-06-05 11:47:59 -04:00
mr1716
bd8cf64ded #19638 Update Django URLs To Stable Version (#19649)
* Update Django URLs To Stable Version

* Update docs/configuration/security.md

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-06-05 11:38:07 -04:00
mr1716
67b42710ef #19634 Update values to ensure consistency when referencing values set (#19635)
* Update values to ensure consistency when referencing values see\t

* Update required-parameters.md For Updated Django Link

* Update required-parameters.md to fix Django link

* Update error-reporting.md Remove Number Formatting

* Update docs/configuration/error-reporting.md

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-06-05 10:03:22 -04:00
github-actions
67d62a2089 Update source translation strings 2025-06-05 05:02:10 +00:00
Jason Novinger
e24fa2ee4d Fixes #19610: FieldError when sorting Tunnel Termination on tenant (#19612) 2025-06-04 13:50:12 -07:00
bctiemann
5fe5b2e7c4 Merge pull request #19630 from netbox-community/19599-user-changelog-sorting
Fixes #19599: Prevent exception when sorting user's recent activity
2025-06-04 16:17:34 -04:00
Martin Hauser
d68f42140f Closes #19535 - Add Project Stanza to pyproject toml (#19643)
* feat(project): Add project metadata to pyproject.toml

Introduces project metadata, including name, version, authors, and
description, to `pyproject.toml` for enhanced package definition.
Also includes URLs for source code, documentation, and issue tracking.

* docs(release): Add checklist item for Python versions in pyproject.toml

Include step to update minimum and supported Python versions
in the project metadata file as part of the release process.

* docs(release): Update checklist to include pyproject.toml versioning

Add a step to update the version in `pyproject.toml` alongside
`release.yaml`.

* feat(project): Update pyproject.toml for best practices

Refreshes metadata to resolve deprecations and follow packaging best
practices. Updates include description, license, Python versions,
classifiers, maintainers, and repository URLs for improved compliance.

* fix(project): Update repository URL key in pyproject.toml

Replaces the 'Repository' key with 'Source' in accordance with updated
metadata conventions. This ensures compliance with modern best
practices for project metadata.

* fix(project): Specify Python 3 :: Only in classifiers

Updates the Python version classifier in `pyproject.toml` to indicate
support exclusively for Python 3. This change ensures clarity in the
supported Python versions for the project metadata.
2025-06-04 14:37:18 -05:00
Jason Novinger
95d0ca56a7 Fixes #19487: fix ordering issues with CircuitTerminationTable/TunnelTerminationTable configuration (#19600)
* Fixes #19487: make CircuitTermination.termination GFK not orderable

* Add test to ensure no more broken sorting for CircuitTerminationTable

* Fix CircuitTerminationTable.site_group accessor

* Make TunnelTerminationTable.termination GFK field non-orderable
2025-06-04 11:48:23 -05:00
Martin Hauser
716acaa657 docs(plugins): Add guide for cleaning up Content Types
Provides instructions for removing stale Content Types and related
Permissions after uninstalling a plugin. Includes steps for identifying
and safely deleting stale entries to prevent issues in the permissions
management UI.
2025-06-04 17:58:29 +02:00
github-actions
ecb8656723 Update source translation strings 2025-06-04 05:02:13 +00:00
Marcus Weiner
065511fca2 Allow filtering IP addresses by family in GraphQL (#19621) 2025-06-03 11:15:55 -05:00
Jeremy Stretch
77f0eeb7bf Fixes #19587: Occupied filter should match on interfaces terminating a wireless link (#19631) 2025-06-03 07:34:39 -07:00
mr1716
f45b671fc9 #19619 update documentation for consistency (#19620)
* Update system.md For Capitalization Consistency

* Update security.md For Consistency

* Update system.md To Improve Consistency

* Update security.md for Consistency

* Update docs/configuration/security.md

* Update docs/configuration/system.md

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-06-03 09:13:10 -04:00
Arthur Hanson
b1cbdbe079 19623 show description on provider account detail view (#19629)
* 19623 show description on provider account detail view

* Fix indentation

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-06-03 09:03:44 -04:00
Jeremy Stretch
e5e7a66cb9 Apply fix to user view as well 2025-06-03 08:58:16 -04:00
Jeremy Stretch
357ae44cde Fixes #19599: Prevent exception when sorting user's recent activity 2025-06-02 15:14:11 -04:00
mr1716
b62f2347c5 Closes #19611: Update index.md To Spell Acronym First Time It's Found (#19614)
* Update index.md To Spell Acronym First Time It's Found

* Update index.md to make lower case
2025-05-30 13:57:22 -05:00
bctiemann
0c6726d40f Merge pull request #19570 from netbox-community/19490-jinja-template-fails-with-empty-include
Fixes #19490: restores nesting behavior of DataSource-based ConfigTemplate
2025-05-28 09:00:20 -04:00
Jason Novinger
cc099e86e1 Fixes #19520: restores ability to set Prefix.scope via API (#19588) 2025-05-27 10:32:36 -07:00
Alexander Haase
a97b438b7e Fixes #19530: Overhaul documentation for plugin views (#19530) 2025-05-27 10:07:48 -07:00
Jason Novinger
d7672ab260 Fixes #19490: restores nesting behavior of DataSource-based ConfigTemplates
The ability to render nested templates was accidentally removed with the
implementation of #17653, which normalized the behavior of various Jinja2
template rendering actions.

This fix restores that behavior while retaining the normalized behavior.
This fix also includes regression tests to ensure this behavior is not
removed accidentally again in the future.
2025-05-23 16:34:22 -05:00
github-actions
b3d318cbe1 Update source translation strings 2025-05-23 05:02:08 +00:00
bctiemann
2804359cdd Merge pull request #19527 from Omripresent/fix-19496
Fixes #19496: Page error on config render with empty output
2025-05-22 08:09:58 -04:00
bctiemann
e8d08c4d38 Merge pull request #19485 from Omripresent/main
Fixes: #19475 - VM Interface VLAN availibility when cluster and VLAN group scope is dcim.location
2025-05-21 20:24:45 -04:00
bctiemann
98d9e7f8d5 Merge pull request #19516 from larsen0815/patch-2
Fixes #19502: Improve upgrade instructions
2025-05-21 17:58:03 -04:00
Jeremy Stretch
51d046b1f5 Closes #19521: Clean up test suite output (#19524) 2025-05-21 09:57:32 -07:00
github-actions
88565e8f68 Update source translation strings 2025-05-20 05:02:15 +00:00
Jason Novinger
a2a8779ebc Fixes #19415: Increased Circuit/WirelessLink distance upper limit (#19495)
* Fixes #19415: Increased Circuit/WirelessLink absolute distance upper limit

Also adds form validation that provides a useful message to the user
rather than a 500 error with potentially little information.

* Include forgotten migration files

* Remove unnecessary comments

* Remove more unnecessary comments

* Addresses PR feedback

* Gah, remove django migration header comment

* Clean up new has_field_errors mechanism, fix issue with ObjectAttribute

* Address PR feedback, revert changes to render_fieldset template tag
2025-05-19 08:38:30 -04:00
Jason Novinger
03ff535772 Fixes #19510: Re-adds IPAddressType.assigned filter 2025-05-16 15:30:07 -04:00
Omri Abu
e6d364b250 Initilize error_message to empty string
Update template branching for empty template render output
2025-05-16 14:46:43 -04:00
Omripresent
be07f222f6 Merge branch 'netbox-community:main' into main 2025-05-16 14:40:35 -04:00
larsen0815
21f5fe873c Fixes typo 2025-05-16 15:09:52 +02:00
larsen0815
83dc65acb5 Improve upgrade instructions 2025-05-16 12:19:07 +02:00
github-actions
b6c8502408 Update source translation strings 2025-05-16 05:02:28 +00:00
Aaron
4795fab16f Fixes #19486: Fix connection card rendering for Console Server Ports (#19498)
This fixes a visual anomaly with the console server port details page, where cards are inadvertantly nested inside each other.
2025-05-15 09:40:03 -05:00
github-actions
de2e2b5c82 Update source translation strings 2025-05-15 05:02:17 +00:00
Jeremy Stretch
cf7ab43f39 Closes #19493: Change filter() to filter_type() (#19494) 2025-05-14 08:34:25 -07:00
Renato Almeida de Oliveira
1700a9265c Closes: #19200 Add Virtual Chassis name to pane on Device View (#19369) 2025-05-14 08:28:11 -04:00
Aaron Queen
39b03abe72 Use colored labels when displaying virtual circuit types 2025-05-14 08:03:46 -04:00
github-actions
b497b85665 Update source translation strings 2025-05-14 05:02:15 +00:00
Omri Abu
0d29e5776c Update get_for_virtualmachine to support lookup by cluster location
scope
Update test case to include location scoped cluster
2025-05-13 22:20:54 -04:00
Jeremy Stretch
cbe14b76c0 Release v4.3.1 2025-05-13 15:44:10 -04:00
Jeremy Stretch
3d1334a798 Fixes #19464: Fix bulk editing of inventory items from device view (#19477) 2025-05-13 10:23:02 -07:00
Jeremy Stretch
408550d3c7 Fixes #19463: Hide button dropdown for tables which do not support saved configs (#19481) 2025-05-13 10:22:15 -07:00
bctiemann
6b9b5c4184 Merge pull request #19456 from netbox-community/19444-contact-groups-changelog
Fixes #19444: Fix change logging for contact group assignments
2025-05-13 11:39:59 -04:00
Jeremy Stretch
59dce87ba0 Fixes #19465: Fix ability to clear assigned prefix scope in UI (#19479) 2025-05-13 10:21:06 -05:00
bctiemann
f6a85775d7 Merge pull request #19480 from netbox-community/19472-vdc-device-column
Fixes #19472: Fix device column rendering in virtual device contexts table
2025-05-13 11:12:55 -04:00
Jeremy Stretch
33887e7c69 Fixes #19472: Fix devie column rendering in virtual device contexts table 2025-05-13 10:46:41 -04:00
github-actions
b57ceca2fd Update source translation strings 2025-05-13 05:02:09 +00:00
bctiemann
8e13f2a9ec Merge pull request #19443 from netbox-community/19440-migration-connections
Fixes #19440: Ensure data migrations use the correct database connection
2025-05-12 14:13:31 -04:00
bctiemann
6af4f5d7ee Merge pull request #19400 from netbox-community/19397-graphql-IPRangeFilter-role
Fixes #19397: Fix filtering IP ranges by role in GraphQL API
2025-05-12 14:05:13 -04:00
bctiemann
6054f8197d Merge pull request #19418 from netbox-community/19381-script
19381 fix data file script sync
2025-05-12 11:32:16 -04:00
github-actions
fc98294812 Update source translation strings 2025-05-10 05:02:10 +00:00
Martin Hauser
4b58678823 feat(dcim): Add 2.5 Gbps and 5 Gbps options to InterfaceSpeedChoices (#19445)
Extend `InterfaceSpeedChoices` to include 2.5 Gbps and 5 Gbps values.
This improves support for modern interface speeds and enhances API data
validation.
2025-05-09 14:02:30 -05:00
Jeremy Stretch
abeed474f6 Fixes #19444: Fix changeloggin for contact group assignments 2025-05-09 14:21:02 -04:00
Martin Hauser
d1303f49e6 Fixes #19432 - Update PostgreSQL Version in Programming Error Message (#19446) 2025-05-09 07:38:47 -07:00
Martin Hauser
127452f4d5 feat(search): Add search index for tags
Introduces a search index for the Tag model to enable global search for
Tags. Includes fields for name, slug, and description with corresponding
weight values. Display attributes are limited to the description field.

Fixes #17073
2025-05-09 08:55:05 -04:00
github-actions
2979067b65 Update source translation strings 2025-05-09 05:02:08 +00:00
Abraham Vegh
6c07aeeded Add 1000BASE-SX interface type 2025-05-08 15:45:03 -04:00
Jeremy Stretch
76aa255f07 Fixes #19440: Ensure data migrations use the correct database connection 2025-05-08 14:53:52 -04:00
dianbofa
0c04a8d301 feat(core): Add queue_name parameter to Job.enqueue() method (#19424) 2025-05-08 08:39:55 -07:00
Corubba
6665810a6d Fixes #19361: Fix wrong graphql field data-types (#19373) 2025-05-07 08:29:52 -07:00
Jason Novinger
8baf15771a Fixes #17107: Circuit to Provider Network cabling visual bug 2025-05-07 09:28:02 -04:00
github-actions
045417c45c Update source translation strings 2025-05-07 05:02:11 +00:00
Arthur
aac333a6d4 19381 fix data file script sync 2025-05-06 11:50:02 -07:00
Andrey Tikhonov
145ee11a3f Fixes #19309: N+1 problem on /interfaces, /ip-addresses and /prefixes requests (#19304)
* Fixes N+1 problem on /interfaces, /ip-addresses and /prefixes requests

* remove extra .all()

* more prefetch for IPAddressViewSet
2025-05-06 11:47:44 -05:00
github-actions
94618a9dfb Update source translation strings 2025-05-06 05:02:20 +00:00
mr1716
21e813cee2 #19404 Deduplicate IP Range API Serializer (#19405) 2025-05-05 14:31:12 -05:00
Étienne Brunel
2c014bade5 fix: Set qinq_role allow_null to True 2025-05-05 10:16:05 -04:00
mr1716
b17bfef7e5 Fixes #19370: Update documentation default values (#19374)
* Update security.md for default values

* Update plugins.md documentation default formatting

* Tweak punctuation

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-05-05 09:33:59 -04:00
Arthur Hanson
88f7b6508c 19380 call configure on embedded tables (#19390)
* 19380 call configure on  embedded tables

* 19380 call configure on  embedded tables

* 19380 call configure on  embedded tables
2025-05-05 09:29:32 -04:00
Jeremy Stretch
bd4f1e7d2f Fixes #19397: Fix filtering IP ranges by role in GraphQL API 2025-05-05 08:41:46 -04:00
Jeremy Stretch
6e49cee718 Fixes #19376: Fix FieldDoesNotExist exception when global search results include a contact (#19389) 2025-05-02 14:24:08 -05:00
Jeremy Stretch
4868818576 Fixes #19375: Fix table configuration after applying a saved table config (#19385) 2025-05-02 10:13:28 -07:00
Jeremy Stretch
7cd5dc0c84 Closes #19383: Extend security policy to provide guidance on compliance reporting 2025-05-02 10:20:57 -04:00
github-actions
aea51df06c Update source translation strings 2025-05-02 05:02:18 +00:00
Jeremy Stretch
c95098c4f0 Merge pull request #19371 from netbox-community/release-v4.3.0
Release v4.3.0
2025-05-01 12:44:46 -04:00
Jeremy Stretch
c32d1e637f Corrected v4.3.0 release notes 2025-05-01 12:24:02 -04:00
Jeremy Stretch
29f0ca6e0d Release v4.3.0 2025-05-01 10:22:40 -04:00
Jeremy Stretch
64b5867cb3 Merge branch 'main' into feature 2025-05-01 09:45:38 -04:00
github-actions
dd9000919a Update source translation strings 2025-05-01 05:02:08 +00:00
Jeremy Stretch
e5cdd8f2b0 Release v4.2.9 2025-04-30 14:31:30 -04:00
Jeremy Stretch
6202ae1236 Closes #19358: Move release info from footer to nav menu (#19360) 2025-04-30 10:44:10 -07:00
Jeremy Stretch
15c7a19fb7 Fixes #19365: Omit plugin icon from page title 2025-04-30 13:14:15 -04:00
Martin Hauser
1141ddb22a feat(virtualization): Add Q-in-Q SVLAN to VMinterface template (#19345) 2025-04-30 08:50:28 -07:00
bctiemann
68e9da5cd9 Merge pull request #19333 from netbox-community/17405-plugin-icons
Fixes #17405: Added plugin icon to plugin list/detail
2025-04-30 10:48:42 -04:00
Jeremy Stretch
22e8de48fc Upgrade Tabler to v1.2 (#19355) 2025-04-30 07:34:26 -07:00
bctiemann
36d71ccdd1 Merge pull request #19251 from netbox-community/17613-columns
17613 Add column support for mobile devices
2025-04-30 09:15:20 -04:00
bctiemann
fadc358329 Merge pull request #19357 from netbox-community/17319-device-and-module-type-behind-tabs
Fixes #17319: Arrange device and module type fields behind tab in com…
2025-04-30 09:09:55 -04:00
bctiemann
5274b3d727 Merge pull request #19352 from netbox-community/19351-pin-actions
Closes #19351: Pin 3rd party GitHub actions to commit hash
2025-04-30 09:02:51 -04:00
bctiemann
c0e6168d34 Merge pull request #19347 from netbox-community/19346-redirect-checks
Fixes #19346: Ensure all redirect URLs are validated
2025-04-30 09:01:55 -04:00
github-actions
01da6186eb Update source translation strings 2025-04-30 05:02:08 +00:00
Markku Leiniö
0466c8ef9b Closes #19167: Update REST API examples (#19353)
* Closes #19167: Update REST API examples

* Fix missing description

---------

Co-authored-by: Markku Leiniö <markkuleinio@users.noreply.github.com>
2025-04-29 13:31:06 -04:00
Jason Novinger
964ae56d34 Fixes #17319: Arrange device and module type fields behind tab in component template forms 2025-04-29 12:16:05 -05:00
Jason Novinger
e2e42acf42 Add grayscale image filter
Hat tip to @pheus. Thanks!

I did end up leaving the filter function arguments as the Sass
processor complains when you try calling a filter function without
an argument. :/
2025-04-29 11:53:12 -05:00
Jason Novinger
32a4d743ee Fix KeyError 2025-04-29 11:43:36 -05:00
Jeremy Stretch
5342552054 Fixes #15739: Account for parallel cables when calculating total path length (#19356) 2025-04-29 11:32:43 -05:00
Jeremy Stretch
732f50d8da Closes #19351: Pin 3rd party GitHub actions to commit hash 2025-04-29 08:42:52 -04:00
github-actions
48a367c409 Update source translation strings 2025-04-29 05:02:15 +00:00
Jeremy Stretch
ac3c2e2de3 Closes #19348: Plug the NetBox Cloud Free tier (#19349) 2025-04-28 16:28:54 -05:00
Jeremy Stretch
e44ad8af45 Fixes #19346: Ensure all redirect URLs are validated 2025-04-28 14:27:49 -04:00
Arthur Hanson
81dfaf0d67 18706 Fix VLAN Assignment checking (#19332)
* 18706 Fix VLAN assignment checking

* 18706 add tests

* 18706 review feedback
2025-04-28 11:45:01 -04:00
Renato Almeida de Oliveira
584fff90c7 Closes #18215: Create ScriptJobTable from JobTable and add it to ScriptSourceView (#19337) 2025-04-28 09:57:48 -05:00
Renato Almeida de Oliveira
e345ca2659 Add VirtualCircuit reference to ProviderView related models (#19335) 2025-04-28 07:54:10 -07:00
bctiemann
89fd071f37 Merge pull request #19315 from netbox-community/19270-config-context-device-roles
Closes #19270: Apply config contexts from parent devices roles
2025-04-28 08:57:28 -04:00
bctiemann
a840eaf37d Merge pull request #19326 from netbox-community/17812-nav-menu-ordering
Closes #17812: Reorder "sites" in the navigation menu
2025-04-28 08:52:06 -04:00
bctiemann
bdef00f3b0 Merge pull request #19310 from netbox-community/15971-preserve-null-filter
Fixes #15971: Preserve 'none' selection in filter form fields
2025-04-28 08:50:32 -04:00
bctiemann
f652dc7bda Merge pull request #19301 from renatoalmeidaoliveira/19229-cant-unset-a-device-interface-vlan-mode-without-an-error
Fixes: #19229 Validade interface mode changes
2025-04-28 08:48:20 -04:00
Arthur Hanson
18ac29fdd0 18334 add location, device, site to module filters (#19312)
* 18334 add location, device, site to module filters

* 18334 add location, device, site to module filters

* 18334 add tests

* 18334 fix tests

* 18334 add site-group
2025-04-28 08:46:38 -04:00
bctiemann
fdf42860aa Merge pull request #19282 from netbox-community/19281-fix-service-templates
Fixes #19281: Fix service template creation form
2025-04-28 08:45:53 -04:00
Jason Novinger
b31da39c4a Fix CSVModelMultipleChoiceField.clean assuming all values are str/None 2025-04-28 08:41:27 -04:00
Jeremy Stretch
0f4afbca2c Closes #17243: Include example of image upload using REST API (#19330) 2025-04-25 15:33:46 -05:00
Jeremy Stretch
a0006632a7 Closes #19327: Remove CentOS installation instructions (#19328) 2025-04-25 13:05:08 -07:00
Jason Novinger
9173a113b7 Update compiled static files with updated NPM deps 2025-04-25 14:07:03 -05:00
Jason Novinger
afc7b35af0 Added plugin icon to plugin list/detail 2025-04-25 13:50:36 -05:00
Jeremy Stretch
37cfc50202 Fixes #19322: Correct URL paths for bulk import views (#19323) 2025-04-25 12:20:25 -05:00
Jeremy Stretch
41f475a316 Closes #17812: Reorder "sites" in the navigation menu 2025-04-25 11:37:45 -04:00
Jamie (Bear) Murphy
e8dd486132 adds related object to rack reservation changelogs (#19306) 2025-04-25 07:32:18 -07:00
Jeremy Stretch
8bd8f28cb9 Fixes #19296: Fix logic for determining default selected columns 2025-04-25 08:14:29 -04:00
github-actions
e58815bb1a Update source translation strings 2025-04-25 05:02:12 +00:00
bctiemann
bee004fc0c Fixes: #18717 - On delete signal handling, manually save the related object in a ManyToOneRel to trigger a change record (#19308)
* On delete signal handling, manually save the related object in a ManyToOneRel to trigger a change record

* Only set remote field to None if null=True on the relation
2025-04-24 14:24:20 -05:00
Jeremy Stretch
0f7789c052 Closes #19270: Apply config contexts from parent devices roles 2025-04-24 15:09:23 -04:00
Jeremy Stretch
e1b2b4b536 Fixes #17676: Fix support for module bay creation when bulk importing module types (#19311) 2025-04-24 11:07:46 -07:00
Daniel Sheppard
f711e666c5 Fixes: #19228 - Fix ordered_scripts to only return ordered list of script objects (#19293) 2025-04-24 11:00:40 -07:00
Jeremy Stretch
47da880547 Fixes #15971: Preserve 'none' selection in filter form fields 2025-04-24 11:42:30 -04:00
mr1716
02f51bc11b Fixes #19255: Improved documentation consistency for configuration default values (#19258) 2025-04-24 09:57:55 -04:00
Martin Hauser
88dd7a16f8 feat(circuits): Use ColoredLabelColumn for type column
Refactors the 'type' column to use ColoredLabelColumn for improved
visual distinction, aligning it with the rack roles display.
Removes the now redundant 'linkify' attribute from the column
definition.
2025-04-24 08:51:42 -04:00
Arthur Hanson
d0c2e0e52b 16238 map custom-link button colors to tabler (#19290)
* 16238 map custom-link button colors to tabler

* 16238 map custom-link button colors to tabler

* 16238 backout temp code

* 16238 optimize
2025-04-24 08:40:14 -04:00
github-actions
983e544376 Update source translation strings 2025-04-24 05:02:08 +00:00
Renato Almeida de Oliveira Zaroubin
125bce84e4 Validade interface mode changes 2025-04-24 01:47:43 +00:00
Jeremy Stretch
fbf926204e Fixes #19204: Use DjangoJSONEncoder for Job data (#19297) 2025-04-23 15:57:48 -05:00
Jeremy Stretch
d005c470c9 Release v4.3.0-beta2 2025-04-23 14:41:46 -04:00
Arthur Hanson
0ce307c7fd 19217 debug toolbar (#19289)
* 19217 update and re-add django-debug-toolbar to INSTALLED_APPS

* 19217 remove debug if not collectstatic
2025-04-23 13:21:59 -05:00
Jeremy Stretch
6c60a4360b Fixes #19279: Fix missing status field for inventory item bulk creation (#19283) 2025-04-23 10:49:22 -07:00
Jeremy Stretch
a83dfff736 Fixes #19264: Support table configs on child object list views (#19284)
* Fixes #19264: Support table configs on child object list views

* Clear assigned table config when resetting the configuration
2025-04-23 12:43:25 -05:00
Jeremy Stretch
dfd788c643 Fixes #19263: Render action buttons only if the record model matches the table model (#19287) 2025-04-23 09:38:11 -05:00
Artem Kotik
2c3fe9700f Fixes #19110: Add filters by IP addresses to PrimaryIPFilterSet (#19160)
* Add primary ip filters by address

* Add tests for Device and VirtualDeviceContext models
2025-04-23 09:14:33 -05:00
bctiemann
5b86d5d52a Merge pull request #19272 from netbox-community/19266-fix-ip-copy-button
Fixes #19266: Fix copy-to-clipboard button for IP addresses
2025-04-23 08:51:39 -04:00
Jeremy Stretch
deaff2dad8 Fixes #19281: Fix service template creation form 2025-04-23 08:47:54 -04:00
github-actions
cd3d91e7c7 Update source translation strings 2025-04-23 05:02:11 +00:00
Jeremy Stretch
6c7a0cf2b2 Merge branch 'main' into feature 2025-04-22 16:36:17 -04:00
Jeremy Stretch
d2e74e9d50 Release v4.2.8 2025-04-22 15:44:02 -04:00
Jeremy Stretch
e31b42d132 Fixes #19266: Fix copy-to-clipboard button for IP addresses 2025-04-22 14:44:26 -04:00
bctiemann
02571130b2 Merge pull request #19259 from netbox-community/18961-vc-create-ignore-vc-members
Fixes #18961: Virtual chassis form should exclude members of other VCs when adding members
2025-04-22 14:36:12 -04:00
Jeremy Stretch
46a3ce2559 Fixes #19268: Restore editing conflict protection for several object forms (#19271) 2025-04-22 11:07:03 -07:00
Jeremy Stretch
1850c21714 Fixes #19265: Strip linebreaks from URLs for logging 2025-04-22 12:48:57 -04:00
Jeremy Stretch
13ddd5fd20 Fixes #19230: Allow label reuse when creating multiple components from a pattern (#19261) 2025-04-22 08:55:31 -07:00
Jeremy Stretch
60cdf89cad Fixes #19166: Fix bulk import support for base_choices (#19257) 2025-04-22 08:29:00 -07:00
Jeremy Stretch
77bfc40579 Closes #17136: Add read-only database support to the upgrade script (#19247) 2025-04-22 07:42:54 -07:00
Jeremy Stretch
2f8936d493 Fixes #18961: Virtual chassis form should exclude members of other VCs when adding members 2025-04-22 10:24:43 -04:00
bctiemann
e0b6a31504 Merge pull request #19256 from netbox-community/18959-cable-trace-terminations-ordering
Fixes #18959: Preserve ordering of terminations in cable traces
2025-04-22 10:08:13 -04:00
Jeremy Stretch
8567aa96e4 Remove obsolete comment 2025-04-22 09:42:17 -04:00
bctiemann
cbcd91bf6b Merge pull request #19236 from netbox-community/19224-graphql-choices
Fixes #19224: Fix GraphQL API support for custom field choices
2025-04-22 09:35:55 -04:00
bctiemann
b8805c93b1 Merge pull request #19238 from netbox-community/19225-graphql-filters
Fixes #19225: Extend GraphQL filters
2025-04-22 09:32:28 -04:00
Jeremy Stretch
459c4bfd9d Fixes #18959: Preserve ordering of terminations in cable traces 2025-04-22 09:21:14 -04:00
Jeremy Stretch
918470a2bb Closes #19208: Ignore beta releases when fetching latest release tag 2025-04-22 08:18:23 -04:00
Arthur
c73cc0a36a 18500 fix check for cloning mixin 2025-04-22 08:14:32 -04:00
Renato Almeida de Oliveira Zaroubin
6b9b66aecb make INTERFACE_FHRPGROUPS use FHRPGROUPS _str_ representation 2025-04-22 08:06:24 -04:00
github-actions
b6d10ae6d8 Update source translation strings 2025-04-22 05:02:08 +00:00
Arthur
79ece657ec 17613 Add column support for mobile devices 2025-04-21 11:52:19 -07:00
Arthur
717b9d5232 17613 Add column support for mobile devices 2025-04-21 11:41:56 -07:00
Arthur
0fa98d3aef 17613 Add column support for mobile devices 2025-04-21 11:02:56 -07:00
Renato Almeida de Oliveira
7420c25687 Fixes: #18881 Site Groups are missing VLAN and VM related objects (#18932) 2025-04-21 09:11:01 -07:00
Jeremy Stretch
5121122350 Add missing GraphQL filters 2025-04-18 13:13:43 -04:00
Jeremy Stretch
66064be9a5 Extend filters for circuit terminations 2025-04-17 16:52:51 -04:00
Jeremy Stretch
4455c2c7dc Fixes #19224: Fix GraphQL API support for custom field choices 2025-04-17 12:22:14 -04:00
Jeremy Stretch
24d4847dc5 Fixes #19213: Fix dropdown field rendering by reverting to Tabler v1.0 (#19232) 2025-04-17 07:29:40 -07:00
github-actions
248c94bd35 Update source translation strings 2025-04-16 05:02:15 +00:00
bctiemann
96cf8d14dc Merge pull request #19194 from netbox-community/17908-cable-trace-buttons
Closes #17908: Add trace buttons to terminations under cable view
2025-04-15 18:13:59 -04:00
bctiemann
2356a3c125 Merge pull request #19162 from alehaa/19040-copy-rendered-config
Fixes #19040: Add button to copy rendered config to clipboard
2025-04-15 18:00:47 -04:00
bctiemann
0d81007fdf Merge pull request #19178 from netbox-community/19139-tx-force-pull
Closes #19139: Use --force when invoking tx pull
2025-04-15 17:59:58 -04:00
atownson
c108c738ae Fixes #18669 - Populate custom field default values (#19115) 2025-04-15 13:26:03 -07:00
Martin Hauser
cac41cd093 Fixes #19196: Add Filtering by VLAN Translation Policy to Interface Filter Forms (#19199)
* feat(dcim): Add VLAN Translation Policy to Filter Form

Introduces support for VLAN Translation Policies in the Interface
Filter Form.

* feat(virtualization): Add VLAN Translation Policy to Filter Form

Introduces support for VLAN Translation Policies in the Interface
Filter Form.
2025-04-15 16:24:45 -04:00
Jeremy Stretch
27b26ec49c Fixes #19195: Language cookie should respect SESSION_COOKIE_SECURE value (#19197) 2025-04-15 13:03:33 -07:00
Jeremy Stretch
7c2776d721 Closes #19201: Include TS source with sourcemap (#19202) 2025-04-15 14:42:40 -05:00
Martin Hauser
1f93471659 Fixes #18978 - Allow filtering of Interfaces in the GUI by 802.1Q Mode (#19183)
* feat(dcim): Add VLAN mode filter to CommonInterface

Introduces a new FilterSet for VLAN mode in CommonInterfaceFilterSet.
This allows filtering interfaces based on their VLAN mode using defined
choices.

* feat(dcim): Add VLAN mode filter to Interface FilterForm

Add a field to InterfaceFilterSet to filter interfaces by 802.1Q VLAN
mode.

* feat(virtualization): Add VLAN mode filter to VMInterface

Add a field to VMInterfaceFilterSet to filter interfaces by 802.1Q VLAN
mode.

* fix(dcim): Correct mode filter parameter type in tests

Updates the `mode` filter parameter to accept a list instead of a single
value in `test_filtersets.py`. Ensures proper count assertion for
accurate test behavior.

* feat(virtualization): Add tests for VLAN mode filtering

Introduces tests to validate filtering by `mode` for VMInterface.
Ensures correct filtering for 802.1Q VLAN mode.

* refactor(virtualization): Reorganize FieldSets in FilterSets

Splits the 'Attributes' FieldSet into two distinct FieldSets for better
clarity: 'Attributes' and 'Addressing'. This improves form organization
and makes it more intuitive for users.
2025-04-15 13:47:51 -04:00
Jeremy Stretch
d3768feb31 Closes #17908: Add trace buttons to terminations under cable view 2025-04-15 11:41:00 -04:00
Jeremy Stretch
70cc7c7563 Fixes #19169: Remove horizontal padding from highlighted text (#19181) 2025-04-15 07:13:58 -07:00
Jeremy Stretch
8b091fb219 Fixes #19189: BaseScript.load_yaml() should use SafeLoader (#19190) 2025-04-15 08:58:13 -05:00
Martin Hauser
44cb1a9139 Fixes #19056 – Add Device filtering by Location slug (#19180)
* feat(dcim): Add filter by location slug for Device

Introduces a TreeNodeMultipleChoiceFilter for filtering locations by
slug. Enhances filtering flexibility in the Device model by supporting
both ID and slug lookups.

Fixes #19056

* feat(dcim): Add Device filtering by location slug in tests

Extend test cases to include filtering by location slug. Ensures the
FilterSet works correctly with slug-based queries for locations.

Fixes #19056
2025-04-15 08:22:59 -04:00
Martin Hauser
bb9b0b8f8a Fixes #18879 - Add prefix filtering by assigned VLAN Group (#19182)
* feat(ipam): Add VLAN group filters to IPAM FilterSet

Introduces filters for VLAN groups using both ID and slug fields.

* feat(ipam): Add VLAN group filter in IPAM FilterForm

Introduces a `vlan_group_id` filter to IPAM forms for filtering based on
VLAN groups.

* feat(ipam): Add VLAN group filtering to tests

Introduces tests for VLAN group filtering in FilterSets. This ensures
correct validation and behavior when filtering by VLAN group.
2025-04-15 07:59:32 -04:00
github-actions
785ad505ba Update source translation strings 2025-04-15 05:02:10 +00:00
Jeremy Stretch
8aacef60a3 Closes #19175: Remove outdated NetBox installation video (#19177) 2025-04-14 15:14:59 -05:00
Jeremy Stretch
d8fc052bbe Closes #19139: Use --force when invoking tx pull 2025-04-14 15:55:08 -04:00
Renato Almeida de Oliveira Zaroubin
1f79411878 Add GetRelatedModelsMixin to ClusterView 2025-04-14 15:39:49 -04:00
Jeremy Stretch
7375042f9e Release v4.3-beta1 (#19172)
* Draft changelog for v4.3 release

* Add release notes summary & nav link

* Docs cleanup

* Update Python dependencies

* Update static assets

* Revert errant change to schema

* Fix minimum PostgreSQL version

* Misc cleanup

* Correct issue numbers in change log
2025-04-14 15:12:47 -04:00
bctiemann
186545e45f Remove #18095 from v4.2.5 release notes (#19165) 2025-04-14 13:56:37 -04:00
Jeremy Stretch
31565de93f Fixes #19173: Fix heading text on table config form (#19174) 2025-04-14 10:14:10 -07:00
bctiemann
7abce9031b Merge pull request #19170 from netbox-community/18287-last_sync-column
#18287: Add a `last_synced` table column
2025-04-14 11:26:40 -04:00
bctiemann
94d19e8f15 Remove #18095 from v4.2.5 release notes (#19165) 2025-04-14 07:26:37 -07:00
Jeremy Stretch
13c6602ea8 #17653: Style JSON data for config & export templates (#19171) 2025-04-14 07:25:55 -07:00
Jeremy Stretch
3444dc503d #19002: Display boolean attributes as checkmarks (#19168) 2025-04-14 07:57:15 -05:00
Jeremy Stretch
b7740b947a #18287: Add a last_synced table column 2025-04-14 08:48:20 -04:00
Alexander Haase
f337ef1134 Add button to copy rendered config 2025-04-13 18:02:21 +02:00
Jeremy Stretch
d55f02b25f #14591, #17841: Adjust default weighting (#19155)
* #14591, #17841: Adjust default weighting

* Fix tests
2025-04-11 14:27:55 -05:00
Arthur
978b5b0ed6 17170 ContactGroup Serializer nested and fix related objects 2025-04-11 15:13:40 -04:00
Arthur
021114071c 17608 L2VPNSerializer Status should be ChoiceField 2025-04-11 14:42:34 -04:00
Arthur
693543f0b2 18352 power outlet choicefield for API serializer 2025-04-11 13:25:46 -04:00
Arthur
811dd949a3 19073 fix display of installed plugins 2025-04-11 13:23:16 -04:00
Jeremy Stretch
5d7ed871f2 Fixes: #18783 Add a tag_id filter for all models which support tagging (#18889) (#19142) 2025-04-11 09:26:46 -07:00
Jason Novinger
f96df73093 Closes #8423: Allow assigning Service to FHRP Group, in addition to Device and VirtualMachine (#19005) 2025-04-11 07:27:31 -07:00
Jeremy Stretch
6ed41f6680 Fixes #18955: Include the "clear" button only for non-required dropdown fields (#18971)
* Include the 'clear' button only for non-required fields

* Apply the 'required' attribute for mandatory <select> fields

* Recompile static assets
2025-04-11 08:20:24 -04:00
github-actions
28e62d21a9 Update source translation strings 2025-04-11 05:02:06 +00:00
Jeremy Stretch
fc0acb020f Merge main into feature 2025-04-10 17:17:21 -04:00
Jeremy Stretch
bb5057c063 Closes #14591: Saved table configurations (#19101)
* Add SavedTableConfig

* Update table configuration logic to support TableConfigs

* Update table config link when updating table

* Correct docstring

* Misc cleanup

* Use multi-select widgets for column selection

* Return null config params for tables with no model

* Fix auto-selection of selected columns

* Update migration

* Clean up template

* Enforce enabled/shared flags

* Search/filter by table name

* Misc cleanup

* Fix population of selected columns

* Ordering field should not be required

* Enable cloning for TableConfig

* Misc cleanup

* Add model documentation for TableConfig

* Drop slug field from TableConfig

* Improve TableConfig validation

* Remove add button from TableConfig list view

* Fix ordering validation to account for leading hyphens
2025-04-10 15:48:02 -05:00
Jeremy Stretch
03f3f5c957 Release v4.2.7 2025-04-10 16:07:24 -04:00
Jeremy Stretch
fe7fb94e44 Revert "Fixes: #18783 Add a tag_id filter for all models which support taggin…"
This reverts commit 9a1d9365cd.
2025-04-10 15:42:26 -04:00
github-actions
82b9e4ca26 Update source translation strings 2025-04-10 05:02:11 +00:00
Jeremy Stretch
457fb977a7 Fixes #19122: Fix styling of the server error (500) page (#19126) 2025-04-09 14:57:25 -07:00
Jeremy Stretch
13c20957a6 Closes #18652: Run housekeeping GitHub actions only on the main repository (#19125) 2025-04-09 16:28:00 -05:00
Jason Novinger
30208549ba Fixes #19092: scope type selection lost when editing multiple/all objects (#19102) 2025-04-09 14:55:41 -04:00
Jeremy Stretch
f8f2ad1d14 Closed #9763: Treat IP ranges as fully populated (#19064) 2025-04-09 07:30:11 -07:00
Arthur Hanson
076d16ca6b 19073 allow plugins to be marked as hidden or disabled in plugins table (#19087)
* 19073 allow plugins to be marked as hidden or disabled in plugins table

* 19073 allow plugins to be marked as hidden or disabled in plugins table

* 19073 allow plugins to be marked as hidden or disabled in plugins table

* 19073 review changes

* Rename 'unlinked' to 'static' & update docs

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-04-09 08:02:38 -04:00
atownson
bf286df670 Fixes #19030 - Update z-index of floating buttons (#19118)
* Increase z-index of form floating buttons

* Update netbox.css
2025-04-08 16:02:08 -05:00
Jeremy Stretch
2be257db48 Closes #19112: Configure ruff to target Python 3.10 (#19113) 2025-04-08 09:46:31 -05:00
Renato Almeida de Oliveira
fbd6d8c7fc Closes #17653: Add function to trim whitespaces in export templates via jinja environment settings (#19078)
* Create RenderMixin, and unify template_code rendering and exporting

* Join migrations

* Add DEFAULT_MIME_TE constant

* Move RenderMixin to extras.models.mixins, Rename RenderMixin to RenderTemplateMixin

* Add render_jinja2 to __all__

* Rename ConfigTemplateFilterForm rendering FieldSet

* ConfigTemplate lint

* Simplify ExportTemplate get_context

* Fix table order, and add fields for translations

* Update Serializers

* Update forms, tables, graphQL, API

* Add extra tests for ConfigTemplate and ExportTemplate

* Documentation update

* Fix typo

* Misc cleanup

* Clean up template layouts

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-04-08 10:37:15 -04:00
bctiemann
3902cab925 Merge pull request #19070 from netbox-community/17166-remove-limit_choices_to
Closes #17166: Remove obsolete `limit_choices_to` argument from ForeignKey & M2M fields
2025-04-07 14:10:05 -04:00
bctiemann
2207ea1a32 Merge pull request #19046 from pheus/docs/18733-add-version-requirements-matrix
Fixes #18733: Add Dependency Version Matrix for NetBox Versions to the Upgrade Documentation
2025-04-07 14:01:54 -04:00
Martin Hauser
10e1ae8292 docs(release): Update Dependency Requirements Matrix header
Renames the "Adopt the Dependency Requirements Matrix" section to
"Update the Dependency Requirements Matrix" for clarity.
2025-04-07 17:17:26 +02:00
Martin Hauser
f8f5ab8d61 docs(release): Correct formatting in release checklist 2025-04-07 16:55:23 +02:00
bctiemann
eee932a6a5 Merge pull request #19075 from netbox-community/19004-deprecate-inventory-items
Closes #19004: Mark inventory items as deprecated in the documentation
2025-04-07 10:29:19 -04:00
bctiemann
ff26f4302c Merge pull request #19084 from netbox-community/19083-django-52
Closes #19083: Upgrade Django to v5.2.0
2025-04-07 10:28:04 -04:00
Daniel Sheppard
64fca01cdb Final test fix 2025-04-05 20:11:27 -05:00
github-actions
92317248a3 Update source translation strings 2025-04-05 05:02:12 +00:00
Jeremy Stretch
426e6439e3 Fixes #18553: Update site for VMs only if cluster has a site assigned (#19086) 2025-04-04 10:58:06 -07:00
Jeremy Stretch
621b29cd71 Closes #19035: Move the registration of core event types to the app config (#19088) 2025-04-04 11:18:42 -05:00
Jeremy Stretch
5e44e49a8a Closes #18236: Upgrade to HTMX v2.0 (#19077) 2025-04-04 09:16:13 -05:00
Jeremy Stretch
e252cc3ce1 Closes #19083: Upgrade Django to v5.2.0 2025-04-04 09:39:04 -04:00
Jeremy Stretch
092769da7e Closes #16058: Fix circular import involving register_model_view() (#19076) 2025-04-03 19:09:04 -07:00
Jeremy Stretch
67480dcf4f Closes #18191: Remove duplicate SQL indexes (#19074)
* Closes #18191: Remove redundant SQL indexes

* Update developer documentation

* Add a system check for duplicate indexes
2025-04-03 15:16:57 -05:00
Jeremy Stretch
d44012963f Closes #19004: Mark inventory items as deprecated in the documentation 2025-04-03 14:49:54 -04:00
Daniel Sheppard
d699c69abf Fix test 2025-04-03 11:11:30 -05:00
Jeremy Stretch
d93d398afa Closes #17166: Remove obsolete limit_choices_to argument from ForeignKey & M2M fields 2025-04-03 09:17:20 -04:00
github-actions
8f5d273f08 Update source translation strings 2025-04-03 05:02:01 +00:00
Martin Hauser
45779a24a4 docs(release): Update checklist with dependency requirements
Add steps to update the dependency requirements matrix for each minor
release in the release checklist. Clarify how to document changes for
system requirements and linked installation guides.

Fixes #18733
2025-04-02 21:41:36 +02:00
Martin Hauser
f17bbe610e Fixes #19041: Call super().clean() in FrontPortCreateForm (#19051)
* fix(forms): Call super().clean() in clean methods

Adds a call to super().clean() in the clean methods of object creation
forms. This ensures base class validation logic is executed properly
before custom logic is applied.

Fixes #19041

* test(forms): Add tests for front port form validation

Introduces unit tests for validating FrontPortCreateForm behavior.
Tests include scenarios for matching and mismatched name-label pairs
to ensure proper form validation logic.

Fixes #19041

* Omit errant print statement

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-04-02 08:29:21 -04:00
Jeremy Stretch
6a966ee6c1 Closes #18785: Allow for custom rack/device/module airflow choices (#19054) 2025-04-01 14:06:23 -07:00
Jeremy Stretch
a00144026b Closes #16630: Enable plugins to embed custom <head> content (#19055) 2025-04-01 14:09:49 -05:00
Jeremy Stretch
8d7889e2c0 Closes #19002: Module type profiles (#19014)
* Move Module & ModuleType models to a separate file

* Add ModuleTypeProfile & related fields

* Initial work on JSON schema validation

* Add attributes property on ModuleType

* Introduce MultipleOfValidator

* Introduce JSONSchemaProperty

* Enable dynamic form field rendering

* Misc cleanup

* Fix migration conflict

* Ensure deterministic ordering of attriubte fields

* Support choices & default values

* Include module type attributes on module view

* Enable modifying individual attributes via REST API

* Enable filtering by attribute values

* Add documentation & tests

* Schema should be optional

* Include attributes column for profiles

* Profile is nullable

* Include some initial profiles to be installed via migration

* Fix migrations conflict

* Fix filterset test

* Misc cleanup

* Fixes #19023: get_field_value() should respect null values in bound forms (#19024)

* Skip filters which do not specify a JSON-serializable value

* Fix handling of array item types

* Fix initial data in schema field during bulk edit

* Implement sanity checking for JSON schema definitions

* Fall back to filtering by string value
2025-04-01 12:05:06 -05:00
bctiemann
bad820001d Merge pull request #19015 from netbox-community/18738-script-list-ignoring-script-order
Fixes #18738: Ensure ScriptList respects script_order option
2025-04-01 10:09:39 -04:00
Daniel Sheppard
97d426d205 Correct test failure and add check for related_model 2025-04-01 08:16:33 -05:00
Renato Almeida de Oliveira
864db469ba Fixes: #18305 make contacts mixin available for plugins (#19029) 2025-04-01 09:03:25 -04:00
Martin Hauser
a5106b858d docs(upgrading): Add dependency matrix for NetBox versions
Adds a dependency matrix to the upgrade guide, detailing supported
Python, PostgreSQL, and Redis versions for each NetBox release. This
helps users verify compatibility before upgrading.

Fixes #18733
2025-04-01 07:23:42 +02:00
github-actions
bbd5e9cab9 Update source translation strings 2025-04-01 05:02:06 +00:00
bctiemann
12231ad71a Merge pull request #18997 from antoinekh/18964_fix_bulk_edit_all
Fixes #18964 Select all with bulk edit only changes the currently visible objects
2025-03-31 18:36:04 -04:00
Jeremy Stretch
88ef9ecfa3 Fixes #19023: get_field_value() should respect null values in bound forms (#19024) 2025-03-31 16:34:46 -05:00
github-actions
6f78b3d0cd Update source translation strings 2025-03-29 05:02:03 +00:00
Arthur Hanson
1508e3a770 Fixes #18245: Make DeviceRole Hierarchical (#19008)
Made DeviceRoles hierarchical, had to also change the filtersets for Device, ConfigContext and VirtualMachine to use the TreeNodeMultipleChoiceFilter.

Note: The model was changed to use NestedGroupModel, a side-effect of this is it also adds comments field, but I thought that was better then doing a one-off just for DeviceRole and having to define the fields, validators, etc.. - keeps everything DRY / consistent.

* 18981 Make Device Roles Hierarchical

* 18981 forms, serializer

* 18981 fix tests

* 18981 fix tests

* 18981 fix tests

* 18981 fix tests

* 18981 fix tests

* 18981 fix migration merge

* 18981 fix tests

* 18981 fix filtersets

* 18981 fix tests

* 18981 comments

* 18981 review changes
2025-03-28 14:32:02 -05:00
Jason Novinger
d3f42deb32 Fixes #18895: Allows VirtualCircuitTerminations as Interface connected_endpoints (#19027) 2025-03-28 08:58:09 -07:00
Jason Novinger
db4fb8f406 Fixes #18999: Allow GraphQL to represent inventory items with no set manufacturar (#19016) 2025-03-28 07:57:56 -07:00
ZPrimed
5b8eaced1a Update choices.py - add MoCA (Coaxial) 2025-03-28 08:45:04 -04:00
github-actions
ada0c7f687 Update source translation strings 2025-03-28 05:02:14 +00:00
Daniel Sheppard
e32d2ca637 Annotate queryset instead of using a model property 2025-03-27 14:36:09 -05:00
Jeremy Stretch
b750d0dff2 Fixes #19021: Ensure consistent styling for JSON form fields (#19022) 2025-03-27 08:58:37 -05:00
Jason Novinger
e1e514251e Fixes #18965: Ensure script list run buttons respect scripts' commit_default option (#19013)
* Fixes #18965: Script list run buttons respect scripts' commit_default

* Cleanup script .Meta access in template
2025-03-27 08:39:50 -04:00
Renato Almeida de Oliveira
7d80a45bf8 Fixes: #16144 GetReturnURLMixin Support for Plugin Views (#18996)
* Add plugin support to GetReturnURLMixin

* use get_viewname instead of resolving the name
2025-03-27 08:33:09 -04:00
github-actions
09854a3d54 Update source translation strings 2025-03-27 05:02:15 +00:00
Jason Novinger
39a96ddf3a Fixes #18738: Ensure ScriptList respects script_order option 2025-03-26 15:35:06 -05:00
atownson
be26f86b62 Added advanced object selector to custom field object and multi-object inputs (#18830) 2025-03-26 10:42:45 -07:00
Jason Novinger
fd2bcda8b8 Fixes #18991: AttributeError: NoneType object has not attribute model (#19006) 2025-03-26 10:12:45 -07:00
Arthur Hanson
7a71c7b8f8 18417 Add outer_height to racks (#18940)
* 18417 add rack outer height

* 18417 add rack outer height

* 18417 fix tests

* 18417 fix validation message

* Update netbox/dcim/filtersets.py

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Update netbox/dcim/filtersets.py

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Update netbox/dcim/models/racks.py

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Update netbox/dcim/models/racks.py

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Update netbox/dcim/models/racks.py

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Update netbox/dcim/models/racks.py

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* 16224 review changes

* 16224 review changes

* 16224 update table display

* 18417 use TemplateColumn

* 18417 review changes

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-03-26 08:42:13 -04:00
github-actions
817d7efee3 Update source translation strings 2025-03-26 05:03:20 +00:00
Renato Almeida de Oliveira
9a1d9365cd Fixes: #18783 Add a tag_id filter for all models which support tagging (#18889) 2025-03-25 08:06:22 -07:00
Antoine Keranflec'h
ada4a4b93c fix #18964 reinsert else condition 2025-03-25 08:22:59 +00:00
github-actions
64a98fd87f Update source translation strings 2025-03-25 05:02:04 +00:00
Arthur Hanson
bd8e00a935 18904 add tags to config context table (#18938)
* 18904 add tags to config context table

* 18904 tag to correct table
2025-03-24 17:02:36 -04:00
Jeremy Stretch
af5a600583 Closes #18980: Optimize update of object data when adding/removing custom fields (#18983)
* Employ native PostgreSQL functions for updating object JSON data when adding/removing custom fields

* Optimize rename_object_data()

* remove_stale_data() should validate model class
2025-03-24 12:02:54 -05:00
github-actions
8ab73501d1 Update source translation strings 2025-03-22 05:02:10 +00:00
Renato Almeida de Oliveira
447e108d97 Fixes: #18656 Unable to import IP Address and assign to FHRP Group (#18950)
* Add fhrpgroup to IPAddressImportForm

* Change fhrpgroup accessor to name

* rename fhrpgroup to fhrp_group

* Add fhrp_group to  IPAddressTestCase csv_data
2025-03-21 16:44:10 -05:00
bctiemann
e186113cb3 Merge pull request #18986 from netbox-community/release-v4.2.6
Release v4.2.6
2025-03-21 17:17:50 -04:00
Jason Novinger
40452ead62 Cleanup release notes 2025-03-21 16:03:34 -05:00
Jason Novinger
34d80beaa2 Release v4.2.6 2025-03-21 15:49:20 -05:00
Yi
b1d014b520 Fixes #18949: Add missing GraphQL ContactsMixin in types with ContactAssignments 2025-03-21 13:00:50 -05:00
github-actions
7db0765ed2 Update source translation strings 2025-03-21 05:02:02 +00:00
Jason Novinger
b8cc2d7116 Fixes #18887: Allows VMInterface object custom field on Prefix (#18945) 2025-03-20 13:55:12 -07:00
Arthur Hanson
fe7cc8cae9 Closes #16224 GraphQL Pagination (#18903)
* 16244 add pagination

* 16244 add pagination

* 16244 fix order_by pagination

* 16224 document pagination

* 16224 remove extraneous code

* 16224 missing core types

* 16224 review changes

* 16224 review changes

* 16224 review changes
2025-03-20 15:00:14 -05:00
Renato Almeida de Oliveira
d332a0c0d7 Fix sitegroup typo, VLANGroupFilterForm field didn't match between form and filterset (#18947) 2025-03-20 11:30:39 -05:00
Jason Novinger
80440fd025 Fixes #17443: Adds ExportTemplate.file_name field (#18911)
* Fixes #17443: Adds ExportTemplate.file_name field

* Addresses PR feedback

- Adds `file_name` to `ExportTemplateBulkEditForm.nullable_fields`
- Shortens max length of `ExportTemplate.file_name` to 200 chars
- Adds tests for `ExportTemplateFilterSet.file_extension`

* Fixes migration conflict caused by fix for #17841
2025-03-20 09:17:56 -04:00
Jason Novinger
f07e2dd4e2 Fixes #18944: Clearing widget type field no longer causes 500 error (#18946)
* Fixes #18944: Clearing widget type field no longer causes 500 error

* Address PR feedback, cleanup implementation
2025-03-20 09:12:05 -04:00
Renato Almeida de Oliveira
d7b9b09d56 Fixes: #18939 Allow ASN search by site-group (#18948)
* Add site_group and site_group_id to ASNFilterSet and ASNFilterForm

* Implement ASNTestCase site_group test case
2025-03-20 09:07:48 -04:00
github-actions
9da4cf31ab Update source translation strings 2025-03-20 05:02:02 +00:00
Jason Novinger
6b7d23d684 Closes #17841 Allows Tags to be displayed in specified order (#18930) 2025-03-19 10:17:35 -07:00
Jeremy Stretch
d25605c261 Closes #18751: Set the default value of ALLOW_TOKEN_RETRIEVAL to False (#18943)
* Closes #18751: Set the default value of ALLOW_TOKEN_RETRIEVAL to False

* Enable token retrieval during testing
2025-03-19 09:40:54 -05:00
bctiemann
958dcca8d6 Fix migration conflict in tenancy (#18957) 2025-03-19 09:38:10 -05:00
Renato Almeida de Oliveira
bf1a9a6e2d Fixes: #18833 Inventory Item Bulk Import - 'InventoryItemImportForm' has no field named 'component_id'. (#18874)
* Refactor InventoryItemImportForm clean method

* Add super().clean(); renamed content_type; simplified component creation

* Fix missing component_name issue

* Update netbox/dcim/forms/bulk_import.py

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-03-19 09:56:42 -04:00
bctiemann
c50b1c989d Merge pull request #18929 from netbox-community/18928-housekeeping-changelog-cleanup
Fixes #18928: Fix support for cascading deletions when cleaning up expired changelog records
2025-03-19 09:51:11 -04:00
bctiemann
cd10087b2b Merge pull request #18859 from netbox-community/17602-comments-field-for-nested-models
Closes #17602: adds comments field to NestedGroupModel children
2025-03-19 09:50:11 -04:00
bctiemann
79b0c0f5d6 Merge pull request #18901 from netbox-community/18872-JournalEntry-kind-required
Fixes #18872: JournalEntry `kind` is a required field
2025-03-19 09:40:55 -04:00
github-actions
43840e6a72 Update source translation strings 2025-03-19 05:02:13 +00:00
bctiemann
7c152e9234 Merge pull request #18854 from netbox-community/18782-dashboard-broken-on-notification-list-widget
Fixes #18782: Misconfigured `ObjectListWidget`s now degrade gracefully
2025-03-18 14:45:23 -04:00
Arthur Hanson
af5ec19430 17170 Add ability to add contacts to multiple contact groups (#18885)
* 17170 Allow multiple Group assignments for Contacts

* 17170 update docs

* 17170 update api, detail view, graphql

* 17170 fixes

* 17170 fixes

* 17170 fixes

* 17170 fixes

* 17170 fixes

* 17170 fixes

* 17170 fix bulk import

* 17170 test fixes

* 17170 test fixes

* 17170 test fixes

* 17178 review changes

* 17178 review changes

* 17178 review changes

* 17178 review changes

* 17178 review changes

* 17178 review changes

* 17170 update migration

* 17170 bulk edit form
2025-03-18 14:05:02 -04:00
Jason Novinger
d7709a2a55 Fixes #18926: Uses correct icon for base GitHub auth 2025-03-18 08:48:27 -04:00
github-actions
dce694afa9 Update source translation strings 2025-03-18 05:02:07 +00:00
Daniel Sheppard
1777d4228e Work on 11507
* Add `rir` property method to model
* Add `aggregate` property method to model
* Add `rir` attribute to serializer
* Add `aggregate` attribute to serializer
* Add test for both rir and aggregate fields on API
2025-03-17 21:52:08 -05:00
Jeremy Stretch
c5801f9881 Fixes #18928: Fix support for cascading deletions when cleaning up expired changelog records 2025-03-17 14:16:55 -04:00
Jeremy Stretch
f86647dc28 Fixes #18884: Handle tag assignments manually within deserialize_object (#18908) 2025-03-17 08:43:08 -07:00
Benjamin Dale
0094703609 Closes #18816:Add FC/UPC, FC/APC and FC/PC port types (#18913)
* Closes #18816:Add FC/UPC, FC/APC and FC/PC port types

* Remove release note

---------

Co-authored-by: Ben Dale <7621213-ben_dale@users.noreply.gitlab.com>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-03-17 10:39:28 -04:00
github-actions
f286449284 Update source translation strings 2025-03-14 05:02:07 +00:00
Jason Novinger
b45e256f27 Removes banner from new migrations 2025-03-13 15:43:32 -05:00
bctiemann
4f45328c77 Fixes: #18863 - Exempt MPTT-based models from centrally applying ordering on querysets (#18867) 2025-03-13 13:38:33 -07:00
Jason Novinger
06a206ee33 Extract base NestedGroupModelFilterSet with base search behavior
This can easily be extended (as in the case of LocationFilterSet) by
calling super() and ORing a filter to the queryset that is returned.
See: https://docs.djangoproject.com/en/5.1/ref/models/querysets/#or
2025-03-13 15:36:55 -05:00
Jeremy Stretch
994e7eb9f4 Fixes #18872: JournalEntry kind is a required field 2025-03-13 16:23:53 -04:00
Jason Novinger
2df68e29c9 Ensures overridden filterset search() methods include fields from OrganizationalModelFilterSet 2025-03-13 11:52:06 -05:00
Jason Novinger
1ea6f6e2ce Ensures that all new comments fields render Markdown in tables 2025-03-13 11:52:06 -05:00
Jason Novinger
c0b019b735 Adds WirelessLANGroup.comments to all the required places
- [x] 1. Add the field to the model class
- [x] 2. Generate and run database migrations
- [NA] 3. Add validation logic to clean()
- [NA] 4. Update relevant querysets
- [x] 5. Update API serializer
- [x] 6. Add fields to forms
    - [x] wireless.forms.model_forms, create/edit (e.g. model_forms.py)
    - [x] wireless.forms.bulk_edit, bulk edit
    - [x] wireless.forms.bulk_import, CSV import
    - [NA] filter (UI and API)
- [x] 7. Extend object filter set
- [NA] 8. Add column to object table (Note: was already present)
- [x] 9. Update the SearchIndex
- [x] 10. Update the UI templates
- [x] 11. Create/extend test cases
    - [NA] models
    - [x] views
    - [NA] forms
    - [x] filtersets
    - [x] api
- [NA] 12. Update the model's documentation
2025-03-13 11:52:06 -05:00
Jason Novinger
157df20ad4 Adds TenantGroup.comments to the required locations
- [x] 1. Add the field to the model class
- [x] 2. Generate and run database migrations
- [NA] 3. Add validation logic to clean()
- [NA] 4. Update relevant querysets
- [x] 5. Update API serializer
- [x] 6. Add fields to forms
    - [x] tenancy.forms.model_forms, create/edit (e.g. model_forms.py)
    - [x] tenancy.forms.bulk_edit, bulk edit
    - [x] tenancy.forms.bulk_import, CSV import
    - [NA] filter (UI and API)
- [x] 7. Extend object filter set
- [x] 8. Add column to object table
- [x] 9. Update the SearchIndex
- [x] 10. Update the UI templates
- [x] 11. Create/extend test cases
    - [NA] models
    - [x] views
    - [NA] forms
    - [x] filtersets
    - [x] api
- [NA] 12. Update the model's documentation
2025-03-13 11:52:06 -05:00
Jason Novinger
b8352260ee Adds ContactGroup.comments in the required locations
- [x] 1. Add the field to the model class
- [x] 2. Generate and run database migrations
- [NA] 3. Add validation logic to clean()
- [NA] 4. Update relevant querysets
- [x] 5. Update API serializer
- [x] 6. Add fields to forms
    - [x] tenancy.forms.model_forms, create/edit (e.g. model_forms.py)
    - [x] tenancy.forms.buld_edit, bulk edit
    - [x] tenancy.dorms.bulk_import, CSV import
    - [NA] filter (UI and API)
- [x] 7. Extend object filter set
- [x] 8. Add column to object table
- [x] 9. Update the SearchIndex
- [x] 10. Update the UI templates
- [x] 11. Create/extend test cases
    - [NA] models
    - [x] views
    - [NA] forms
    - [x] filtersets
    - [x] api
- [NA] 12. Update the model's documentation
2025-03-13 11:52:06 -05:00
Jason Novinger
ed98756f3e Adds SiteGroup.comments in the required locations
- [x] 1. Add the field to the model class
- [x] 2. Generate and run database migrations
- [NA] 3. Add validation logic to clean()
- [NA] 4. Update relevant querysets
- [x] 5. Update API serializer
- [x] 6. Add fields to forms
    - [x] dcim.forms.model_forms.LocationForm, create/edit (e.g. model_forms.py)
    - [x] dcim.forms.buld_edit.LocationBulkEditForm, bulk edit
    - [x] dcim.dorms.bulk_import.LocationImportForm, CSV import
    - [x] filter (UI and API)
- [x] 7. Extend object filter set
- [x] 8. Add column to object table
- [x] 9. Update the SearchIndex
- [x] 10. Update the UI templates
- [x] 11. Create/extend test cases
    - [NA] models
    - [x] views
    - [NA] forms
    - [x] filtersets
    - [x] api
- [x] 12. Update the model's documentation
2025-03-13 11:52:06 -05:00
Jason Novinger
9a9d6cdedb Adds Region.comments field in the required locations
- [x] 1. Add the field to the model class
- [x] 2. Generate and run database migrations
- [NA] 3. Add validation logic to clean()
- [NA] 4. Update relevant querysets
- [x] 5. Update API serializer
- [ ] 6. Add fields to forms
    - [x] dcim.forms.model_forms.RegionForm, create/edit (e.g. model_forms.py)
    - [x] dcim.forms.buld_edit.RegionBulkEditForm, bulk edit
    - [x] dcim.dorms.bulk_import.RegionImportForm, CSV import
    - [NA] filter (UI and API)
- [x] 7. Extend object filter set
- [x] 8. Add column to object table
- [x] 9. Update the SearchIndex
- [x] 10. Update the UI templates
- [x] 11. Create/extend test cases
    - [NA] models
    - [x] views
    - [NA] forms
    - [x] filtersets
    - [x] api
- [NA] 12. Update the model's documentation
2025-03-13 11:52:06 -05:00
Jason Novinger
2e2c815c91 Update Location detail UI template 2025-03-13 11:52:06 -05:00
Jason Novinger
44efd5e833 Adds Location.comments field in the required locations
- [x] 1. Add the field to the model class
- [x] 2. Generate and run database migrations
- [NA] 3. Add validation logic to clean()
- [NA] 4. Update relevant querysets
- [x] 5. Update API serializer
- [x] 6. Add fields to forms
    - [x] dcim.forms.model_forms.LocationForm, create/edit (e.g. model_forms.py)
    - [x] dcim.forms.buld_edit.LocationBulkEditForm, bulk edit
    - [x] dcim.dorms.bulk_import.LocationImportForm, CSV import
    - [x] filter (UI and API)
        - [NA] UI
            - Note: could not find any comments related things in filtersets
        - [x] API
- [x] 7. Extend object filter set
- [x] 8. Add column to object table
- [x] 9. Update the SearchIndex
- [x] 10. Update the UI templates
- [x] 11. Create/extend test cases
    - [NA] models
    - [x] views
    - [NA] forms
    - [x] filtersets
    - [x] api
- [NA] 12. Update the model's documentation
2025-03-13 11:52:06 -05:00
Jason Novinger
ae7a47ca60 Adds comments field to abstract NestedGroupModel and associated migrations
Models affected:
- dcim: `Location`, `Region`, `SiteGroup`
- tenancy`: `ContactGroup`, `TenantGroup`
- wireless: `WirelessLANGroup`
2025-03-13 11:52:06 -05:00
Jeremy Stretch
ed135102be Fixes #18880: Delay enqueuing of background tasks until the DB transaction has been committed (#18899) 2025-03-13 11:34:12 -05:00
Jason Novinger
78332d44c7 Fixes #18845: restores sort behavior for DeviceTable.name column (#18861)
* Fixes #18845: restores sort behavior for DeviceTable.name column

* Remove accessor/order_by and modify DEVICE_LINK template

Thanks to @alehaa for the suggestion.

This also includes an additional `.select_related()` operation on
`DeviceListView.queryset` to avoid extra queries. Thanks to
@renatoalmeidaoliveira and @jeremystretch for pointing out the need for
this.
2025-03-13 09:22:49 -04:00
github-actions
80926cda8f Update source translation strings 2025-03-13 05:02:07 +00:00
bctiemann
d924d4eb33 Merge pull request #18886 from ITJamie/add-rackname-to-device-rack-view
Add rack title above rack view on device page
2025-03-12 19:11:22 -04:00
bctiemann
b1e7d7c76b Merge pull request #18826 from Tishka17/fix/generic_prefetch_4.2
Prefetch interface data for REST API on netbox 4.2
2025-03-12 18:55:58 -04:00
Jeremy Stretch
092f7549ca Fixes #18869: Ensure to_meters() always returns a clean decimal value (#18883)
* Fixes #18869: Ensure to_meters() always returns a clean decimal value

* Handle float values
2025-03-12 13:42:38 -05:00
Andrey Tikhonov
2f51dfc07a Merge branch 'fix/generic_prefetch_4.2' of github.com:Tishka17/netbox into fix/generic_prefetch_4.2 2025-03-12 19:13:34 +01:00
Andrey Tikhonov
906654d807 Fix empty line, comments 2025-03-12 19:09:46 +01:00
Renato Almeida de Oliveira
749a83d742 Change JSONField, prepare_value to output str with enclosing " (#18846) 2025-03-12 10:00:40 -07:00
Andrey Tikhonov
cdd25368e7 Merge branch 'main' into fix/generic_prefetch_4.2 2025-03-12 16:27:12 +01:00
Andrey Tikhonov
7d64d3b5ed Move GenericArrayForeignKey to fields module 2025-03-12 16:22:11 +01:00
github-actions
5e22ef59c5 Update source translation strings 2025-03-12 05:02:02 +00:00
Fabi
19d1282683 Fixes #18838: Correctly reject invalid falsy local context data (#18860)
* Correctly reject invalid falsy local context data.

* move tests
2025-03-11 14:18:42 -05:00
bctiemann
2266a8af67 Merge pull request #18804 from renatoalmeidaoliveira/18742-Location-List-and-Locations-not-Showing-Associated-VLAN-Groups
Fixes: #18742 Location List and Locations not Showing Associated VLAN Groups
2025-03-11 11:13:24 -04:00
Renato Almeida de Oliveira
5d81f911d6 Fixes: #18582 Bulk import prefixes with associated VLAN not working when multiple VLANs with the same vid exist. (#18844)
* Add site CSVModelChoiceField

* Change site field to vlan_site
2025-03-11 08:46:46 -04:00
github-actions
89e3f3d3e9 Update source translation strings 2025-03-11 05:02:10 +00:00
Jeremy Stretch
292463c0de Closes #18857: Fix deprecation warnings (#18858) 2025-03-10 14:40:08 -07:00
Antoine Keranflec'h
a9fd191086 Fixes: #18744 Add Contact link as hyperlink (#18847)
* contact link as hyperlink

* fix(lint) add missing blank lines

* simplify by using lambda function
2025-03-10 12:49:24 -05:00
Tobias Genannt
1a60cb9884 Fixes: #18568 Update mkdocstrings and adapt config (#18841)
* Fixes: #18568 Update mkdocstrings and adapt config

* Fixed some output formatting errors

When trying to compare the output from "mkdocstrings[python-legacy]==0.27.0" and
"mkdocstrings[python]==0.28.2" I encountered some HTML errors:
- <div> inside a <p>
- unescaped non-tags <pk>
2025-03-10 13:11:35 -04:00
Jason Novinger
76c3c613a9 Adds validation for ObjectListWidget.ConfigForm.model field 2025-03-10 09:57:45 -05:00
Jason Novinger
528248b560 Fixes #18782: properly check if htmx_url is None
If this is done incorrently, then the string formatting operation turns
`htmx_url` into a string and the test in the template fails.
2025-03-10 09:52:59 -05:00
github-actions
8823b07745 Update source translation strings 2025-03-08 05:02:21 +00:00
Mika Busch
29c25e39fc 17686 config option for disk divider (#18011) 2025-03-07 10:47:27 -08:00
Andrey Tikhonov
d103e13732 Removed automatic cache invalidation 2025-03-07 17:29:04 +01:00
github-actions
6d69c76b83 Update source translation strings 2025-03-07 05:02:48 +00:00
bctiemann
f9c8d12a51 Add docstrings for get_queryset base class methods (#18832) 2025-03-06 11:11:55 -06:00
Renato Almeida de Oliveira
3ef7ab4416 Fixes: #18579 Add contact filters to services (#18818)
* Add Contact filter to Services

* Add ContactModelFilterForm to ProviderAccountFilterForm

* Add Contact filter support for Aggregate

* Add Contact filter support for Prefix

* Add Contact filter to IPRange

* Add Contact filter to IPAddress

* Add Contact filter to L2VPN

* Add Contact filter to TunnelGroup

* Add Contact filter to Tunnel

* Add ContactModelFilterSet to ProviderAccountFilterSet

* Fixes classes inheritance order

Setup NetBoxModelFilterSetForm as the last inherited class

Co-authored-by: Jason Novinger <jnovinger@gmail.com>

---------

Co-authored-by: Jason Novinger <jnovinger@gmail.com>
2025-03-06 09:41:41 -06:00
bctiemann
2d35cc56ed Merge pull request #18823 from netbox-community/release-v4.2.5
Release v4.2.5
2025-03-06 10:10:13 -05:00
Andrey Tikhonov
741645c9f7 Merge branch 'develop' into fix/generic_prefetch_4.2 2025-03-06 16:05:25 +01:00
Andrey Tikhonov
d226af420b Merge branch 'develop' into fix/generic_prefetch_4.2 2025-03-06 16:02:32 +01:00
Andrey Tikhonov
5c88317745 cleanup unused imports and extra line 2025-03-06 16:01:59 +01:00
Jeremy Stretch
dffa380e5c Tweak issue ordering 2025-03-06 09:50:32 -05:00
Brian Tiemann
6d2426843b Merge remote-tracking branch 'origin/release-v4.2.5' into release-v4.2.5 2025-03-06 09:28:08 -05:00
Brian Tiemann
e72b0606ba Bump Django and add missing PRs 2025-03-06 09:27:44 -05:00
Jeremy Stretch
c933cbf11e Update translations 2025-03-06 09:00:09 -05:00
github-actions
9f1ffb54f5 Update source translation strings 2025-03-06 05:02:11 +00:00
Brian Tiemann
29b8827128 Add translation files 2025-03-05 18:52:34 -05:00
bctiemann
6efc5682cd Override get_queryset on generic ObjectListView and NetBoxModelViewSet to reapply model-level ordering (#18805) 2025-03-05 15:52:00 -08:00
Brian Tiemann
033a960cab Fix strawberry-graphql==0.262.0 2025-03-05 18:46:30 -05:00
Brian Tiemann
9f69c46a99 NetBox v4.2.5 2025-03-05 18:43:41 -05:00
Marcus Weiner
631ff3e702 Allow primary key for nested models in OpenAPI request schemas (#18451) 2025-03-05 11:46:12 -08:00
Renato Almeida de Oliveira Zaroubin
ed6ccfb723 Add commit test in job execution 2025-03-05 09:34:18 -05:00
Renato Almeida de Oliveira Zaroubin
d3a9a6827f fix typo in VirtualCircuitFilterForm 2025-03-05 09:28:00 -05:00
github-actions
057653d362 Update source translation strings 2025-03-05 05:02:11 +00:00
Daniel Sheppard
4ab58f2da9 Fixes: #15016 - Catch AssertionError from cable trace and throw ValidationError (#16384) 2025-03-04 10:57:27 -08:00
Renato Almeida de Oliveira Zaroubin
d83c2f45bc Add vlangroup into LocationTable, LocationListView queryset and related_models in LocationView 2025-03-04 18:34:23 +00:00
github-actions
d208ddde9a Update source translation strings 2025-03-04 05:02:19 +00:00
bctiemann
0fbfc4f38c Merge pull request #18789 from jamestiotio/18774-tag-description
Closes #18774: Set title attribute of each tag to its description
2025-03-03 11:35:33 -05:00
Jason Novinger
e86dba8fc8 Fixes #18768: allow removing secondary MACAddress from interface 2025-03-03 09:35:00 -05:00
atownson
3e1d4369ba Closes #17944: Allow filtering of ObjectVar and MultiObjectVar script inputs (#18725)
* Add the advanced object selector to the ObjectVar and MultiObjectVar script inputs

* Fix formatting issue
2025-03-03 09:20:04 -05:00
James Raphael Tiovalen
06b5ff2e4a Closes #18774: Set title attribute of each tag to its description 2025-03-02 18:40:40 +08:00
github-actions
3b1daaaad6 Update source translation strings 2025-03-01 05:02:06 +00:00
Jeremy Stretch
63a167f130 Fixes #15924: Fix API interface patch tagged all mode (#18759)
* Fixes: #15924 - Prevent API payload from allowing tagged_vlans while interface mode is set to taged-all

* Prevent cleanup of tagged_vlans when no tagged_vlans set on interface

* Fix test errors

* Remove accidental debug statements

* Update validation to model clean method instead of serializer

* Remove clearing of tagged vlans from `save()`

* Make changes to validation to account for M2M not being available under model in addition to not being able to check incoming vlans under same model.

* Optimize untagged vlan check

* Re-ordering statements in validators

* Forgot to call super().clean()

* Adjust logic for form and serializer.  Add tests

* Fix test failure

* Fix ruff errors

* Fix test by removing now invalid test

* Update serializer, form and tests

* Optimize API test for vlan fields

* Optimize API serializer logic

---------

Co-authored-by: Daniel Sheppard <dans@dansheps.com>
2025-02-28 11:01:48 -05:00
Jason Novinger
09d867adc3 Fixes #18758: Enable sorting by Account count on prodiver list (#18763) 2025-02-28 07:28:09 -08:00
Jeremy Stretch
7aba6500dd Fixes #18141: Fix quick-add support for plugin models 2025-02-26 14:25:38 -05:00
github-actions
787a2dd7c2 Update source translation strings 2025-02-26 05:02:07 +00:00
Marcus Weiner
c81f4da780 Fix definition of vid_ranges in VLANGroup so it shows up in the OpenAPI schema (#18237) 2025-02-25 16:34:15 -08:00
Renato Almeida de Oliveira
cffb99cec5 Fixes: #17796 Custom Field Choices -> Create & Add Another causes IndexError (#18631) 2025-02-25 14:44:10 -08:00
Brian Tiemann
3b894f9ccb Handle null table in TableConfigForm 2025-02-25 12:59:26 -05:00
Alexander Haase
bf836c9bc2 Fixes 17357: Use virtual chassis name as fallback for device (#18710) 2025-02-25 07:55:00 -08:00
bctiemann
4a4596d5e8 Merge pull request #18721 from atownson/issue_18403
Closes #18403: Do not retrieve the data field from Job objects unless needed
2025-02-25 10:24:42 -05:00
atownson
48b825c64a Closes #18024: Add URL pattern for scripts to reference them by module.name (#18723)
* Add URL pattern for scripts to reference them by module.name

* Change _get_script function name and syntax

* Fix formatting issue
2025-02-25 09:39:39 -05:00
bctiemann
4fb42ac7b3 Merge pull request #18724 from netbox-community/18605-prefix-vlan-assignment-display
Fixes #18605: only VLANs at selected Site are shown in VLAN select
2025-02-25 09:31:48 -05:00
bctiemann
a8b4024016 Merge pull request #18491 from antoinekh/17542-Contact_Assignment_to_vpn_tunnels
#17542 contact assignment to vpn tunnels
2025-02-25 09:23:14 -05:00
Antoine Keranflec'h
a6c07e6a35 fix contact wrong model assignment 2025-02-25 13:53:50 +01:00
Antoine Keranflec'h
59cd5bc653 fix double line breaks 2025-02-25 09:15:55 +01:00
Antoine Keranflec'h
bda4f314a4 Merge branch 'netbox-community:main' into 17542-Contact_Assignment_to_vpn_tunnels 2025-02-25 09:09:13 +01:00
github-actions
2a56c08bc8 Update source translation strings 2025-02-25 05:02:09 +00:00
Brian Tiemann
beb0aff656 Add VLAN Translation Policy to bulk edit forms and tables for Interface and VMInterface 2025-02-24 13:55:40 -05:00
Jason Novinger
64270d6a4e Fixes #18605: only VLANs at selected Site are shown in VLAN select 2025-02-24 11:29:31 -06:00
github-actions
fba4141ce3 Update source translation strings 2025-02-24 15:18:11 +00:00
Jeremy Stretch
a4ecb82330 Clarify error message 2025-02-24 10:14:52 -05:00
atownson
5a3e213fb4 Do not retrieve the data field from Job objects unless needed 2025-02-24 09:07:16 -06:00
Andrey Tikhonov
83ca0ef955 Add missed init 2025-02-24 15:43:07 +01:00
Andrey Tikhonov
9c3e7f2c5d Cleanup 2025-02-24 15:38:19 +01:00
Andrey Tikhonov
7794c6cfcb Fix link peers 2025-02-24 15:28:45 +01:00
Andrey Tikhonov
8dc1d68aee port generic field to 4.2 2025-02-24 15:20:18 +01:00
bctiemann
c4304d059c Merge pull request #18703 from netbox-community/release-v4.2.4
Release v4.2.4
2025-02-21 15:34:15 -05:00
Brian Tiemann
fee66438f3 Fix django-htmx version 2025-02-21 15:19:54 -05:00
Brian Tiemann
0f52712468 Release v4.2.4 2025-02-21 15:15:14 -05:00
Jeremy Stretch
fbaa82df7b Fixes #18674: Fix form reset when selecting a value from a speed selection dropdown 2025-02-21 14:04:50 -05:00
mr1716
9c1358e6e7 #18698 Correct REST Wikipedia URL In Documentation 2025-02-21 09:34:16 -05:00
github-actions
63b7145baa Update source translation strings 2025-02-21 05:02:07 +00:00
Jeremy Stretch
bcd974210d Update Transifex resource slug 2025-02-20 12:53:25 -05:00
Jason Novinger
ed79e3bbf4 Fixes #18619: shift-select selects hidden items
This also fixes the inverse, when a range is unselected via shift-click,
previously checked checkboxes that are hidden are not changed.
2025-02-20 10:17:43 -05:00
Alexander Haase
b5bc0bad38 Cover multitable inheritance in serialization
During serialization, custom fields may be available to a model due to
multi-table inheritance, but might not be available in serialized data
because only direct fields of the model are covered. Now this attribute
is only used if available in serialized data. Models using multi-table
inheritance must modify their serialize_object() method to cover parent
serialization.
2025-02-20 10:09:35 -05:00
Jason Novinger
2a44affd03 Fixes #18594: asn_count sort in Sites list (#18634)
* Fixes #18594: asn_count sort in Sites list

* Fixes similar issue in `circuits.views.ProviderListView`

Thanks @bctiemann for point this out!
2025-02-20 10:01:04 -05:00
Jamie Murphy
d9066d6cff add device rack title 2025-02-19 22:02:59 +00:00
github-actions
57ef44706a Update source translation strings 2025-02-19 05:02:03 +00:00
Jason Novinger
70dddb673b Fixes #18585: filtering circuits by location (#18641)
* Fixes #18585: filtering circuits by location

This also fixes a related issue where selected filter is not shown in
the filter form.

Changes:
- Adds `CircuitFilterSet.location_id` field to enable filtering with
  incoming GET params
- Adds `CirciotFilterForm.location_id` field to enable filtering from
  list form
- Adds `location_id` to the Location fieldset on `CircuitFilterForm`

* Adds test for new CircuitFilterset.location_id filter
2025-02-18 13:33:05 -05:00
Alexander Haase
6c6cb321bf Fixes 18555: Fix model URL generator for plugins (#18607)
* Fix model URL generator for plugins

* Fix reverse accessor warning

* Revert "Fix reverse accessor warning"

This reverts commit f07642bb99.

* Add URL test case for regular models

* Split dummy models

Instead of using a single model for testing, one is used for testing the
plugin API and a dedicated one is used for testing the NetBox plugin
model features.

* Fix filterset test case error

* Rename test module

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-02-18 09:11:32 -05:00
Renato Almeida de Oliveira
11514bfb21 Fixes: #18584 Add rack types column to manufacturers table (#18636)
* Add racktype_count annotation to list view queryset, create the LinkedCountColumn in ManufacturerTable

* Add Manufacturer field to RackTypeFilterForm
2025-02-18 08:41:12 -05:00
github-actions
c324d23634 Update source translation strings 2025-02-15 05:02:03 +00:00
Alexander Haase
f9431f1c29 Replace DurationChoices by JobIntervalChoices 2025-02-14 14:42:27 -05:00
Renato Almeida de Oliveira Zaroubin
b1ac20ac19 Update ModuleBay instance name before saving it 2025-02-14 14:22:29 -05:00
github-actions
f8022040b2 Update source translation strings 2025-02-12 05:02:12 +00:00
Tobias Genannt
8114492673 Close #18357: Display author name for plugins 2025-02-11 12:19:43 -05:00
Renato Almeida de Oliveira
154b3a7abb Fixes: 18593 - "Create & Add Another" broken for new IP addresses (#18602)
* update IPAddressEditView get_extra_addanother_params

* Simplify get_extra_addanother_params
2025-02-11 08:31:40 -05:00
github-actions
015ef25ca0 Update source translation strings 2025-02-10 18:34:35 +00:00
Alexander Haase
3e1cc0d7f3 Fixes 18208: Consolidate rendering configuration templates (#18604) 2025-02-10 11:03:08 -05:00
Alexander Haase
e1d1aab4bd Omit empty related models 2025-02-10 10:56:09 -05:00
Matej Vadnjal
299bde9653 use script form's cleaned data when calling script from CLI
so ObjectVar and other field values have proper types in script's data variable
2025-02-10 09:46:59 -05:00
Alexander Haase
4b98f74943 Fixes 18247: Fix dark mode button classes (#18617) 2025-02-10 09:42:08 -05:00
Jeremy Stretch
a33fb2a0a9 Closes #17918: Fix styling of "tagged items" list under tag view 2025-02-10 09:00:55 -05:00
github-actions
13dc6854c2 Update source translation strings 2025-02-08 05:02:19 +00:00
Antoine Keranflec'h
e475386936 Fixes: #18408 add STATUS_PAUSED to VirtualMachine (#18595)
* feat(vm): add extra status

* keep only usefull status

---------

Co-authored-by: Antoine Keranflec'h <antoine.keranflech@worldline.com>
2025-02-07 16:41:45 -05:00
Jeremy Stretch
0b194e363e Docs cleanup 2025-02-07 15:33:37 -05:00
github-actions
72e93b04da Update source translation strings 2025-02-07 05:02:00 +00:00
Renato Almeida de Oliveira
7794b6718a Fixes: #18013 - All saved filters showing up for Change Log table, regardless of defined object type (#18551)
* Setup ObjectChangeFilterForm __init__ to add query_param to filter_id

* code lint, move __init__ to end of class

* Move filter_id widget setup to SavedFiltersMixin, and add model attributes to Models FilterForms

* Add missing model declarations for filter forms

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
2025-02-06 17:21:46 -05:00
Renato Almeida de Oliveira
efa939d0c2 Fixes: #18241 - Script results log_threshold should default to Default (#18501)
* Changed LogLevelChoices order; Changed ScriptResultView to select LogLevelChoices to LOG_DEFAULT and setup the html template to put (All) in the last one

* Change LogLevelChoices in ScriptResultView get_table method

* Remove default option, add Default string to INFO

* Fix scripts.py and reports.py to reflect removing DEFAULT level

* fix linting
2025-02-06 16:30:25 -05:00
Jeremy Stretch
8e91db0394 Misc cleanup of the release checklist 2025-02-05 11:40:53 -05:00
Antoine Keranflec'h
2a8728544c fix(pep) fix pep8 compliancy 2025-01-31 08:48:35 +01:00
Antoine Keranflec'h
f83e55e1db Merge branch 'netbox-community:main' into 17542-Contact_Assignment_to_vpn_tunnels 2025-01-25 14:19:25 +01:00
Antoine Keranflec'h
113c8d1d85 Merge branch 'netbox-community:develop' into 17542-Contact_Assignment_to_vpn_tunnels 2024-11-12 14:17:05 +01:00
Antoine Keranflec'h
5b2241aaaf fix(17542) add contact to tunnels 2024-10-10 15:38:48 +02:00
4 changed files with 95 additions and 4 deletions
+5 -3
View File
@@ -44,6 +44,8 @@ class AggregateSerializer(NetBoxModelSerializer):
class PrefixSerializer(NetBoxModelSerializer):
aggregate = AggregateSerializer(nested=True, read_only=True, allow_null=True)
rir = RIRSerializer(nested=True, read_only=True, allow_null=True)
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
vrf = VRFSerializer(nested=True, required=False, allow_null=True)
scope_type = ContentTypeField(
@@ -67,9 +69,9 @@ class PrefixSerializer(NetBoxModelSerializer):
class Meta:
model = Prefix
fields = [
'id', 'url', 'display_url', 'display', 'family', 'prefix', 'vrf', 'scope_type', 'scope_id', 'scope',
'tenant', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'description', 'comments', 'tags',
'custom_fields', 'created', 'last_updated', 'children', '_depth',
'id', 'url', 'display_url', 'display', 'aggregate', 'rir', 'family', 'prefix', 'vrf', 'scope_type',
'scope_id', 'scope', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'description',
'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'children', '_depth',
]
brief_fields = ('id', 'url', 'display', 'family', 'prefix', 'description', '_depth')
+29
View File
@@ -2,6 +2,8 @@ from copy import deepcopy
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.db import transaction
from django.db.models import Subquery, OuterRef
from django.db.models.functions import JSONObject
from django.shortcuts import get_object_or_404
from django.utils.translation import gettext as _
from django_pglocks import advisory_lock
@@ -21,6 +23,7 @@ from netbox.api.viewsets.mixins import ObjectValidationMixin
from netbox.config import get_config
from netbox.constants import ADVISORY_LOCK_KEYS
from utilities.api import get_serializer_for_model
from utilities.fields import JSONModelField
from . import serializers
@@ -90,6 +93,32 @@ class PrefixViewSet(NetBoxModelViewSet):
return serializers.PrefixLengthSerializer
return super().get_serializer_class()
def get_queryset(self):
"""
Return the query set with additional annotations for Aggregate and RIR
"""
qs = super().get_queryset()
# Determine the fields to return
aggregate_fields = JSONObject(**{f.name: f.name for f in Aggregate._meta.get_fields()})
rir_fields = JSONObject(**{f.name: f.name for f in RIR._meta.get_fields()})
# Get the outer reference
prefix_field = OuterRef("prefix")
aggregate_field = OuterRef("aggregate_id")
aggregates = Aggregate.objects.filter(prefix__net_contains_or_equals=prefix_field)
rirs = RIR.objects.filter(aggregates=aggregate_field)
# The sub queries for the annotation, returning a json object of the related model
agg_sq = Subquery(
aggregates.values_list(aggregate_fields)[:1], output_field=JSONModelField(related_model=Aggregate)
)
agg_id_sq = Subquery(aggregates.values_list('pk', flat=True)[:1])
rir_sq = Subquery(rirs.values_list(rir_fields)[:1], output_field=JSONModelField(related_model=RIR))
return qs.annotate(aggregate=agg_sq, aggregate_id=agg_id_sq).annotate(rir=rir_sq)
class IPRangeViewSet(NetBoxModelViewSet):
queryset = IPRange.objects.all()
+25
View File
@@ -532,6 +532,31 @@ class PrefixTest(APIViewTestCases.APIViewTestCase):
self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(len(response.data), 8)
def test_get_prefix_with_aggregate_and_rir(self):
self.add_permissions('ipam.view_prefix')
rir = RIR.objects.create(name='RFC 1918', slug='rfc-1918')
aggregate = Aggregate.objects.create(prefix=IPNetwork('192.168.0.0/16'), rir=rir)
prefixes = [
Prefix.objects.filter(prefix=IPNetwork('192.168.2.0/24')).first(),
Prefix.objects.create(prefix=IPNetwork('10.0.0.0/24'))
]
self.assertIsNotNone(prefixes[0])
url = self._get_detail_url(prefixes[0])
response = self.client.get(url, **self.header)
self.assertHttpStatus(response, status.HTTP_200_OK)
self.assertIsNotNone(response.data.get('aggregate'))
self.assertIsNotNone(response.data.get('rir'))
self.assertEqual(response.data.get('aggregate').get('id', None), aggregate.pk)
self.assertEqual(response.data.get('rir').get('id', None), rir.pk)
url = self._get_detail_url(prefixes[1])
response = self.client.get(url, **self.header)
self.assertHttpStatus(response, status.HTTP_200_OK)
self.assertIsNone(response.data.get('aggregate'))
self.assertIsNone(response.data.get('rir'))
class IPRangeTest(APIViewTestCases.APIViewTestCase):
model = IPRange
+36 -1
View File
@@ -1,7 +1,9 @@
from collections import defaultdict
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.core import exceptions
from django.db import models
from django.db.models import ForeignKey, ManyToOneRel, JSONField
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
@@ -13,6 +15,7 @@ __all__ = (
'CounterCacheField',
'NaturalOrderingField',
'RestrictedGenericForeignKey',
'JSONModelField',
)
@@ -186,3 +189,35 @@ class CounterCacheField(models.BigIntegerField):
kwargs["to_model"] = self.to_model_name
kwargs["to_field"] = self.to_field_name
return name, path, args, kwargs
class JSONModelField(JSONField):
def __init__(self, related_model, *args, **kwargs):
"""
Extract the related model from the kwargs and set after instantiation
"""
super().__init__(*args, **kwargs)
if related_model is None or isinstance(related_model, models.Model):
raise exceptions.FieldError('related_model must be set or be an instance of Model')
self.related_model = related_model
def from_db_value(self, value, expression, connection):
"""
Return the actual instantiated model from the fields, minus the models that cannot be worked with
"""
data = super().from_db_value(value, expression, connection)
# Return nothing if there is nothing
if data is None:
return None
# Extract the fields from the meta for processing
fields = {f.name: f for f in self.related_model._meta.get_fields()}
keys = data.copy().keys()
for key in keys:
if key not in fields or isinstance(fields.get(key), (GenericRelation, ForeignKey, ManyToOneRel, )):
# Delete un-parsable fields
del data[key]
# Return the full model minus deleted fields
return self.related_model(**data)