-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Minor - P4
-
Affects Version/s: None
-
Component/s: django
-
None
-
None
-
Python Drivers
-
Not Needed
-
None
-
None
-
None
-
None
-
None
-
None
The check added in INTPYTHON-913 to prohibit creating models with encrypted fields in non-encrypted databases may fail if the database connection isn't initialized (e.g. the first query of a management command):
Traceback (most recent call last): File "/Users/alex.clark/Developer/mongodb/django/.venv/bin/django-admin", line 10, in <module> sys.exit(execute_from_command_line()) ~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line utility.execute() ~~~~~~~~~~~~~~~^^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/core/management/__init__.py", line 437, in execute self.fetch_command(subcommand).run_from_argv(self.argv) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/core/management/base.py", line 420, in run_from_argv self.execute(*args, **cmd_options) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/core/management/base.py", line 464, in execute output = self.handle(*args, **options) File "/Users/alex.clark/Developer/mongodb/django/medical-records/medical_records/management/commands/create_patient.py", line 63, in handle patient.save() ~~~~~~~~~~~~^^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 874, in save self.save_base( ~~~~~~~~~~~~~~^ using=using, ^^^^^^^^^^^^ ...<2 lines>... update_fields=update_fields, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 966, in save_base updated = self._save_table( raw, ...<4 lines>... update_fields, ) File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1169, in _save_table results = self._do_insert( cls._base_manager, using, insert_fields, returning_fields, raw ) File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 1220, in _do_insert return manager._insert( ~~~~~~~~~~~~~~~^ [self], ^^^^^^^ ...<3 lines>... raw=raw, ^^^^^^^^ ) ^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1918, in _insert return query.get_compiler(using=using).execute_sql(returning_fields) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ File "/Users/alex.clark/Developer/mongodb/django/django-mongodb-backend/django_mongodb_backend/compiler.py", line 908, in execute_sql value = field.get_db_prep_save( getattr(obj, field.attname) ...<2 lines>... connection=self.connection, ) File "/Users/alex.clark/Developer/mongodb/django/django-mongodb-backend/django_mongodb_backend/fields/embedded_model.py", line 120, in get_db_prep_save value = field.get_db_prep_save( field.pre_save(embedded_instance, add), connection=connection ) File "/Users/alex.clark/Developer/mongodb/django/django-mongodb-backend/django_mongodb_backend/fields/encryption.py", line 35, in get_db_prep_save if not connection.auto_encryption_opts: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/alex.clark/Developer/mongodb/django/.venv/lib/python3.13/site-packages/django/utils/functional.py", line 47, in __get__ res = instance.__dict__[self.name] = self.func(instance) ~~~~~~~~~^^^^^^^^^^ File "/Users/alex.clark/Developer/mongodb/django/django-mongodb-backend/django_mongodb_backend/base.py", line 389, in auto_encryption_opts return self.connection._options.auto_encryption_opts ^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute '_options'