Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Django Upgrade] [ENG-3947] Direct assignment fix for Django 3 #10010

Conversation

Johnetordoff
Copy link
Contributor

@Johnetordoff Johnetordoff commented Aug 5, 2022

Purpose

Note: PR description added by reviewer

This incompatibility comes from Feature Removed in 2.0

Support for direct assignment to a reverse foreign key or many-to-many relation is removed.

This might have been missed by (or was added after) #9300.

Changes

Replaced direct assignment with .add() and/or .set().

QA Notes

Documentation

Side Effects

Ticket

Part of https://openscience.atlassian.net/browse/ENG-3947

@Johnetordoff Johnetordoff mentioned this pull request Aug 5, 2022
14 tasks
@Johnetordoff Johnetordoff marked this pull request as ready for review August 10, 2022 14:28
Copy link
Collaborator

@cslzchen cslzchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Johnetordoff Can you update the PR description to include

  • A brief description of what is broken and how the fix work.
  • Is there a source of this incompatibility (e.g. django docs and/or references)

My other concern is: if this is an incompatibility caused by Django upgrade, I would expect to see more places broken. Have you taken a look at other places that we may have this "direct assignment issue" (i.e. not found by unit tests)?

@cslzchen cslzchen changed the base branch from develop to feature/django_upgrade August 16, 2022 16:08
@cslzchen cslzchen changed the title direct assignment upgrade for Django 3 [Django Upgrade] [Pending] Direct assignment fix for Django 3 Aug 16, 2022
@Johnetordoff
Copy link
Contributor Author

Yes I see your concerns and I myself am confused by the fact that I can't find direct mention of this change in our doc, but here is the error gist and test job.

@cslzchen
Copy link
Collaborator

cslzchen commented Aug 16, 2022

Ah, I see. The error is TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Must be a missing-documentation incompatibility from django. (See updated comment below). Here is some context I found about this error: https://stackoverflow.com/questions/50015204/direct-assignment-to-the-forward-side-of-a-many-to-many-set-is-prohibited-use-e. And PR looks good, I will update the PR description with more context and then merge.

@cslzchen cslzchen changed the title [Django Upgrade] [Pending] Direct assignment fix for Django 3 [Django Upgrade] [ENG-3947] Direct assignment fix for Django 3 Aug 16, 2022
@cslzchen cslzchen force-pushed the direct-assignment-upgrade-django-3 branch from 6203817 to ff5ea9a Compare August 16, 2022 19:35
@cslzchen
Copy link
Collaborator

Updated:

The incompatibility comes from Feature Removed in 2.0

Support for direct assignment to a reverse foreign key or many-to-many relation is removed.

This might have been missed by (or was added after) #9300.

@cslzchen cslzchen merged commit 724f59a into CenterForOpenScience:feature/django_upgrade Aug 17, 2022
Johnetordoff pushed a commit to Johnetordoff/osf.io that referenced this pull request Aug 17, 2022
…OpenScience/osf.io into django-3-squash-only

* 'feature/django_upgrade' of https://github.com/CenterForOpenScience/osf.io:
  [Django Upgrade] Upgrade markdown and mdx_del_ins (CenterForOpenScience#9984)
  [Django Upgrade] Replace M2M direct assignment  (CenterForOpenScience#10010)
  [Django Upgrade] Upgrade django-elasticsearch-metrics (CenterForOpenScience#10021)
  [Django Upgrade] Fix one sub-query slicing issue (CenterForOpenScience#10012)
  Re-add non-anonymized fields removed in CenterForOpenScience#10009 (CenterForOpenScience#10022)
  Update shield logo for colorado (UC Boulder)
  Update description for maglab
  [ENG-3249] Improve registration anonymization (CenterForOpenScience#10009)
  "backport" artifact changes and swap schema_response.justification (CenterForOpenScience#10003)
  Add new instn purdue
  Ensure BitBucket token is string, not bytes
  Only redirect to cas if not logged in
  OSFI: Update Shared SSO and Add MagLab/FSU [ENG-3654]
Johnetordoff pushed a commit to Johnetordoff/osf.io that referenced this pull request Aug 17, 2022
…OpenScience/osf.io into django-3-2

* 'feature/django_upgrade' of https://github.com/CenterForOpenScience/osf.io:
  [Django Upgrade] Upgrade markdown and mdx_del_ins (CenterForOpenScience#9984)
  [Django Upgrade] Replace M2M direct assignment  (CenterForOpenScience#10010)
  [Django Upgrade] Upgrade django-elasticsearch-metrics (CenterForOpenScience#10021)
  [Django Upgrade] Fix one sub-query slicing issue (CenterForOpenScience#10012)
cslzchen pushed a commit that referenced this pull request Sep 1, 2022
cslzchen pushed a commit that referenced this pull request Sep 22, 2022
cslzchen pushed a commit that referenced this pull request Oct 20, 2022
mfraezz pushed a commit that referenced this pull request Oct 21, 2022
PRs:
* remove post-migrate signals from migration stream (#9964)
* move createcachetable to post migrate signal (#9944)
* [ENG-3836] Investigate waffle flags (#9950)
* [ENG-3865] Create Licenses using post-migrate signal (#9961)
* [ENG-3863] Move schema ensuring and schema blocks update to post-migrate signals (#9974)
* [ENG-3868] Move blocked email domains to post-migrate signal (#9958)
* [ENG-3866] Move citation style population out of migration stream (#9966)
* [ENG-3867] Create Storage Regions on post migration signal (#9965)
* [ENG-3836] Follow-up: Add PyYAML to Requirements (#9993)
* [ENG-3862] Move post-migrate signal out of migration stream for default providers (#9971)
* Remove unused password change view/route (#9985)
* Update import paths and fix deprecated modules for Django 3 (#9983)
* Update postgres backend and remove failover router for Django 3 (#10011)
* Move file metadata population to unit test fixtures (#9994)
* [Django Upgrade] Fix one sub-query slicing issue (#10012)
* [Django Upgrade] Upgrade django-elasticsearch-metrics (#10021)
* [Django Upgrade] Replace M2M direct assignment  (#10010)
* [Django Upgrade] Upgrade markdown and mdx_del_ins (#9984)
* [Django Upgrade] Move schema activeness/visibility update to pytest fixtures (#10029)

Commits:
* Remove osf migrations
* Remove addon migrations
* Init migrations - osf
* Init migrations - addons
* Fix migration for NotableEmailDomain
* Fix circular import with built-in admin migrations
* Add a RunSQL migration to update indexes
* Upgrade django to 3.2.15 (and related dependencies)
* Make fields defined on typedmodels subclasses nullable
* Add required on_delete=CASCADE (default) to FKs missing it
* Fix django CORS whitelist settings due to origin definition update
* Add/Enable missing templates and middlewares in api settings
* Comment out admin permissions that clash with built-in "view" ones
* Add migrations for django upgrade base fixes
* Fix system check warnings for django admin
* Fix django cache table creation
* Enable django.contrib.sessions.middleware.SessionMiddleware
* Use default truthy and falsy values from upgraded DRF 3.13.1
* Use JsonField from django.db.models and django.forms
* Fix session cookie encoding/decoding by using ensure_str()
* Use prefetch instead of Django include
* Fix CORS for ORIGINS_WHITELIST
* Rename auto generated migration for django3 upgrade fixes
* Remove QuickFile check from get_serializer_class for FileDetail view
* Add registration_schema to DraftRegistrationDetailSerializer
* Add id to DraftRegistrationDetailSerializer
* Fix middleware order and replace deprecated staticfiles with static
* Fix and rework from_db_value & to_python for EncryptedJSONField
* Fix admin login failure for django upgrade
* Wrap generated keen_read_key with ensure_str
* Clear cached storage region property when creating a new version
* Do not notify in set_password() when creating a test user
* Fix RegistrationFactory for django3 upgrade
* Remove unused update_version_metadata in file node and update tests
* Remove tests for django-include
* Remove EGAP backfill command and tests
* Set DEFAULT_AUTO_FIELD to django.db.models.AutoField (default value)
* Replace deprecated NullBooleanField + add migrations
* Replace deprecated url() with re_path() for api
* Replace deprecated url() with re_path() for admin
* Fix missing or insufficient permission test for admin preprints view
* Fix admin user view tests by using HTTP response headers object
* Fix duplicate view_node permissions in node and instn view tests
* Rework refresh_from_db() to reload GFKs
* Fix visible contributor query
* Fix handle_archive_fail and its tests
* Use a different schema to fix tests failure due to django3 upgrade
* Update URLs for URL Validation tests with Django 3
* Improve to_internal_value() in NodeRelationshipField
* Add alt fixtures to prevent both siblings & parent/child conflicts
* Fix linked_by_nodes in node related counts test
* Fix bugged NullBooleanField -> BooleanField migration
* Re-make migrations for django3 upgrade and merge them into one

Co-authored-by: Longze Chen <[email protected]>
Co-authored-by: John Tordoff <[email protected]>
Co-authored-by: Jon Walz <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants