#36260: bulk_create() does not fetch primary keys if they are generated by database -------------------------------------+------------------------------------- Reporter: Dmitry | Owner: Dmitry Shachnev Shachnev | Type: | Status: assigned Uncategorized | Component: | Version: 5.2 Uncategorized | Severity: Normal | Keywords: Triage Stage: | Has patch: 1 Unreviewed | Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -------------------------------------+------------------------------------- In our project, we use a function that generates UUID on database side (it’s `uuid7` function from PostgreSQL 18).
The `bulk_create` function uses `_is_pk_set()` method to check if the object already has a primary key assigned. However, `_is_pk_set()` wrongly returns True in this case: primary key is not None, however it is a `DatabaseDefault` instance and does not actually return a value. Because of this, the objects returned by `bulk_create` do not actually have an ID. I prepared a patch to fix this, and wrote a test case for it. Without my patch, the test fails with the following error: {{{ ====================================================================== FAIL: test_db_default_primary_key (bulk_create.tests.BulkCreateTests.test_db_default_primary_key) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/dmitry/upstream/django/tests/bulk_create/tests.py", line 878, in test_db_default_primary_key self.assertIsInstance(obj1.id, UUID) ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^ AssertionError: <django.db.models.expressions.DatabaseDefault object at 0x7f2563f6b570> is not an instance of <class 'uuid.UUID'> ---------------------------------------------------------------------- }}} -- Ticket URL: <https://code.djangoproject.com/ticket/36260> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/django-updates/01070195a03a1c26-0d338fa9-2ec4-417b-a9b1-d90411c3527a-000000%40eu-central-1.amazonses.com.