Changes between Version 1 and Version 2 of Ticket #36235, comment 12


Ignore:
Timestamp:
Apr 18, 2026, 7:32:56 AM (4 weeks ago)
Author:
Vasilis Vagenas

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #36235, comment 12

    v1 v2  
    11Hello.
    2 The problem can still be reproduced:
    3 * Git commit hash: `ed79c5959add54b6e8ea589ec601e0d2e801517e`
    4 * test method: the method `test_get_or_create_on_related_queryset`, mentioned above by Nick Pope
    5 * test output:
     2The problem can still be reproduced using the test method `get_or_create.tests.GetOrCreateTests.test_get_or_create_on_related_queryset`, mentioned above by Nick Pope.
     3* This test method was added after checking out :
     4  * `ed79c5959add54b6e8ea589ec601e0d2e801517e` (branch: `main`)
     5  * `fb61c8a6e902abc885048a1a78592a4bd4329f87` (branch: `stable/5.2.x`)
     6* The `IntegrityError` is not thrown (and the test succeeds) based on either of the aforementioned Git commits, if we change the `get_or_create` call to:
     7  * `book, created = p.books.all().get_or_create(name="The Book of Ed & Fred", publisher=p)`
     8* This agrees with what Nick Pope suggested that ".get_or_create() and .update_or_create() lose context of the related instance"
     9* the test output for the case of the main branch can be found below:
    610
    711{{{
     
    1216  File "/home/vasilis/oss_projects/django/django/django/db/models/query.py", line 1029, in get_or_create
    1317    return self.get(**kwargs), False
    14     ^^^^^^^^^^^^^^^^^
     18           ^^^^^^^^^^^^^^^^^^
    1519  File "/home/vasilis/oss_projects/django/django/django/db/models/query.py", line 681, in get
    1620    raise self.model.DoesNotExist(
    17     ^^^^^^^^^^^^^^^^^
    1821get_or_create.models.Book.DoesNotExist: Book matching query does not exist.
    1922
     
    2326  File "/home/vasilis/oss_projects/django/django/django/db/backends/utils.py", line 105, in _execute
    2427    return self.cursor.execute(sql, params)
    25     ^^^^^^^^^^^^^^^^^
     28           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    2629  File "/home/vasilis/oss_projects/django/django/django/db/backends/sqlite3/base.py", line 359, in execute
    2730    return super().execute(query, params)
    28     ^^^^^^^^^^^^^^^^^
     31           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    2932sqlite3.IntegrityError: NOT NULL constraint failed: get_or_create_book.publisher_id_column
    3033
     
    3235
    3336Traceback (most recent call last):
    34   File "/usr/lib/python3.12/unittest/case.py", line 58, in testPartExecutor
    35     yield
    36   File "/usr/lib/python3.12/unittest/case.py", line 634, in run
    37     self._callTestMethod(testMethod)
    38     ^^^^^^^^^^^^^^^^^
    39   File "/usr/lib/python3.12/unittest/case.py", line 589, in _callTestMethod
    40     if method() is not None:
    41     ^^^^^^^^^^^^^^^^^
    4237  File "/home/vasilis/oss_projects/django/django/tests/get_or_create/tests.py", line 159, in test_get_or_create_on_related_queryset
    4338    book, created = p.books.all().get_or_create(name="The Book of Ed & Fred")
    44     ^^^^^^^^^^^^^^^^^
     39                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    4540  File "/home/vasilis/oss_projects/django/django/django/db/models/query.py", line 1036, in get_or_create
    4641    return self.create(**params), True
    47     ^^^^^^^^^^^^^^^^^
     42           ^^^^^^^^^^^^^^^^^^^^^
    4843  File "/home/vasilis/oss_projects/django/django/django/db/models/query.py", line 711, in create
    4944    obj.save(force_insert=True, using=self.db)
    50     ^^^^^^^^^^^^^^^^^
    5145  File "/home/vasilis/oss_projects/django/django/django/db/models/base.py", line 896, in save
    5246    self.save_base(
    5347  File "/home/vasilis/oss_projects/django/django/django/db/models/base.py", line 988, in save_base
    5448    updated = self._save_table(
    55     ^^^^^^^^^^^^^^^^^
     49              ^^^^^^^^^^^^^^^^^
    5650  File "/home/vasilis/oss_projects/django/django/django/db/models/base.py", line 1191, in _save_table
    5751    results = self._do_insert(
    58     ^^^^^^^^^^^^^^^^^
     52              ^^^^^^^^^^^^^^^^
    5953  File "/home/vasilis/oss_projects/django/django/django/db/models/base.py", line 1243, in _do_insert
    6054    return manager._insert(
    61     ^^^^^^^^^^^^^^^^^
     55           ^^^^^^^^^^^^^^^^
    6256  File "/home/vasilis/oss_projects/django/django/django/db/models/manager.py", line 87, in manager_method
    6357    return getattr(self.get_queryset(), name)(*args, **kwargs)
    64     ^^^^^^^^^^^^^^^^^
     58           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    6559  File "/home/vasilis/oss_projects/django/django/django/db/models/query.py", line 2108, in _insert
    6660    return query.get_compiler(using=using).execute_sql(returning_fields)
    67     ^^^^^^^^^^^^^^^^^
     61           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    6862  File "/home/vasilis/oss_projects/django/django/django/db/models/sql/compiler.py", line 1935, in execute_sql
    6963    cursor.execute(sql, params)
    70     ^^^^^^^^^^^^^^^^^
    7164  File "/home/vasilis/oss_projects/django/django/django/db/backends/utils.py", line 79, in execute
    7265    return self._execute_with_wrappers(
    73     ^^^^^^^^^^^^^^^^^
     66           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    7467  File "/home/vasilis/oss_projects/django/django/django/db/backends/utils.py", line 92, in _execute_with_wrappers
    7568    return executor(sql, params, many, context)
    76     ^^^^^^^^^^^^^^^^^
     69           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    7770  File "/home/vasilis/oss_projects/django/django/django/db/backends/utils.py", line 100, in _execute
    7871    with self.db.wrap_database_errors:
    79     ^^^^^^^^^^^^^^^^^
     72         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    8073  File "/home/vasilis/oss_projects/django/django/django/db/utils.py", line 94, in __exit__
    8174    raise dj_exc_value.with_traceback(traceback) from exc_value
    82     ^^^^^^^^^^^^^^^^^
    8375  File "/home/vasilis/oss_projects/django/django/django/db/backends/utils.py", line 105, in _execute
    8476    return self.cursor.execute(sql, params)
    85     ^^^^^^^^^^^^^^^^^
     77           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    8678  File "/home/vasilis/oss_projects/django/django/django/db/backends/sqlite3/base.py", line 359, in execute
    8779    return super().execute(query, params)
    88     ^^^^^^^^^^^^^^^^^
     80           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    8981django.db.utils.IntegrityError: NOT NULL constraint failed: get_or_create_book.publisher_id_column
    9082
Back to Top