#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.

Reply via email to