mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-12 05:20:31 +01:00
Upgrade from v3.7.8 to v4.4.0 fails on migration users.0005_alter_user_table (core_objecttype missing)
#11586
Closed
opened 2025-12-29 21:47:11 +01:00 by adam
·
10 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#11586
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @pheus on GitHub (Sep 7, 2025).
Originally assigned to: @jnovinger on GitHub.
Deployment Type
Self-hosted
NetBox Version
v4.4.0
Python Version
3.10
Steps to Reproduce
ALLOWED_HOSTS) and initialize using the provided script:Expected Behavior
The upgrade should complete successfully. All migrations should apply without errors and NetBox should start normally on v4.4.0.
Observed Behavior
The migration fails while applying
users.0005_alter_user_tablewith an error indicating thatcore_objecttypedoes not exist:After this exception, the upgrade process aborts.
@pheus commented on GitHub (Sep 7, 2025):
Cross‑reference: This issue was originally raised in GitHub Discussions:
Errors while upgrading from 3.7.8 to 4.4.0 (#20284)
I was able to fix the migration failure by adjusting the dependency ordering for
users.0005_alter_user_tableso that thecore_objecttypetable exists before this migration runs.users.0005_alter_user_tableimplicitly relies oncore_objecttype, but its dependencies didn’t guarantee thatcore.0018_concrete_objecttype(and the later Extras changes) had been applied first. This led to the error.c9f823167c/netbox/users/migrations/0005_alter_user_table.py (L26-L29)I changed the migration’s dependencies as follows:
After this change,
./upgrade.sh(orpython manage.py migrate) completes without errors and the upgrade to v4.4.0 succeeds for me.I’m happy to open a PR with this change if the approach looks acceptable.
Thanks for taking a look!
@AnythingOverIP commented on GitHub (Sep 8, 2025):
I was also getting the error on
users.0005_alter_user_tablewhile trying to migrate from 3.7.6 to 4.4.0. After applying the above mentioned change, I got past the error I had but now getting the following error onextras.0115_convert_dashboard_widgets:@jeremystretch commented on GitHub (Sep 10, 2025):
I have confirmed that this error occurs only when upgrading directly from v3.7.x to v4.4.0 (which, to be fair, is meant to be supported). As a workaround, you can first upgrade to v4.3.7, and then to v4.4.0 or later:
Migrating from v3.7.8 to v4.3.7:
Migrating from v4.3.7 to v4.4.0:
@jeremystretch commented on GitHub (Sep 11, 2025):
Unfortunately, reordering the migration's dependencies presents an issue when upgrading to v4.4 from a more recent release (e.g. 4.3.7). We'll need to figure out a different solution.
@pheus commented on GitHub (Sep 11, 2025):
Thanks for the fast turnaround! I’m sorry my earlier suggestion created more friction. I didn’t fully appreciate the knock‑on effects of changing an already‑applied migration. Apologies for the noise.
If it’s helpful, here’s what I’m seeing:
users.0005_alter_user_table, the call to delete theusers.userContentType(ContentType.objects.using(db_alias).filter(app_label='users', model='user').delete()) fires Django’spre_deletesignal. In v4.4.0, the receiverextras.signals.notify_object_changed()now consultsnetbox.models.features.has_feature(), which queries the new concretecore.ObjectTypemodel. On a direct 3.7.8 → 4.4.0 upgrade, thecore_objecttypetable doesn’t exist yet, so the migration crashes.notify_object_changed()used the in‑memory feature registry (andObjectTypewas a proxy, not a table), so the sameusers.0005migration didn’t need to querycore_objecttypeand proceeded normally.users.0005isn’t viable (it’s already applied for 4.3.x → 4.4.0 upgrades). We’ll need a forward‑only remedy that preserves history.Again, apologies for the churn! Thank you for the quick engagement. If I’ve misunderstood anything here, please let me know.
@jnovinger commented on GitHub (Sep 11, 2025):
Apologies, this got auto-closed because I included some details in the merge message that reverted the earlier fix attempt.
@pheus commented on GitHub (Sep 12, 2025):
Thank you to everyone involved — and my sincere apologies for the churn.
I’m not a Django migrations expert, so I may be missing something here. I tried a few forward‑only approaches to keep upgrades possible, and the most promising in my testing was to squash existing migrations and adjust dependencies while keeping the original migrations intact.
For the
usersapp, I was able to get through using the approach below. However, after adding more realistic data, I’m hitting an issue inextras(aRunPythonstep during the custom dashboard conversion), which suggests we might need additional, carefully targeted squashing on the non‑users side — and that could risk circular dependencies. Given these trade‑offs, I’m starting to think the most pragmatic path might be to document an intermediate upgrade step (e.g., 3.7.8 → 4.3.7 first, then 4.4.0+), rather than allowing a single hop from 3.7.8 straight to 4.4.0.Apologize again for any noise. If this is not helpful, I’m okay to step back.
For reference (what worked for me in
users)To make the
usersupgrade path reliable without modifying already‑applied migrations or changing runtime behavior, I prepared a squashed migration in the users app that replaces0005through0011(as of v4.4.0). This squashed file adds the required cross‑app dependencies and ports the customRunPythonlogic so that direct upgrades have the correct ordering and data updates.What this does
0005→0011with a single squashed migration.extras.0117_move_objectchangeandcore.0018_concrete_objecttypeso that:core_objectchangeexists before any operations that touch it.core.ObjectTypetable exists before signal handlers or data migrations that query it.RunPythonfunctions to usecore.ObjectTypewhere appropriate.Proposed squashed migration (users)
Suggested filename:
netbox/users/migrations/0012_squashed_0005_0011.pyOnce again, thank you for the guidance and patience. Apologies if I’ve caused extra work here.
@derekchisholm commented on GitHub (Sep 17, 2025):
I'm facing a similar issue upgrading from 4.0.5 to 4.1.1 using releases.
I'm happy to help with additional info or open a new issue if needed.
@timfischbach commented on GitHub (Oct 1, 2025):
Modifying the DB with the following command by another user fixed the issue for me:
More infos about this here:
https://github.com/netbox-community/netbox/discussions/17388#discussioncomment-10582898
@jeremystretch commented on GitHub (Oct 6, 2025):
I've just submitted an alternative PR (#20518) which solves this from a different angle, though ultimately still hinges on checking for the presence of the
core_objecttypetable when callingObjectType.objects.get_for_model().