Re: [Django] #33312: Errors when trying to clone an object from a deferred queryset

2021-11-23 Thread Django
#33312: Errors when trying to clone an object from a deferred queryset
-+-
 Reporter:  Adam Sołtysik|Owner:  nobody
 Type:  Bug  |   Status:  new
Component:  Database layer   |  Version:  3.2
  (models, ORM)  |
 Severity:  Normal   |   Resolution:
 Keywords:   | Triage Stage:
 |  Unreviewed
Has patch:  0|  Needs documentation:  0
  Needs tests:  0|  Patch needs improvement:  0
Easy pickings:  0|UI/UX:  0
-+-
Changes (by Egor R):

 * cc: Egor R (added)


-- 
Ticket URL: 
Django 
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 on the web visit 
https://groups.google.com/d/msgid/django-updates/065.ea6d12c7fe4433f8894f28247c9ecc98%40djangoproject.com.


[Django] #33312: Errors when trying to clone an object from a deferred queryset

2021-11-23 Thread Django
#33312: Errors when trying to clone an object from a deferred queryset
-+-
   Reporter:  Adam   |  Owner:  nobody
  Sołtysik   |
   Type:  Bug| Status:  new
  Component:  Database   |Version:  3.2
  layer (models, ORM)|
   Severity:  Normal |   Keywords:
   Triage Stage: |  Has patch:  0
  Unreviewed |
Needs documentation:  0  |Needs tests:  0
Patch needs improvement:  0  |  Easy pickings:  0
  UI/UX:  0  |
-+-
 As per [https://docs.djangoproject.com/en/3.2/topics/db/queries/#copying-
 model-instances documentation], it's possible to clone objects by setting
 `pk = None`.

 However, if the object to clone comes from a deferred queryset (after
 calling `defer` or `only`), trying to save the copy raises some hard to
 decipher exceptions.

 {{{
 class DeferCloneTest(TestCase):
 @classmethod
 def setUpTestData(cls):
 SimpleItem.objects.create(name="test", value=42)

 def _get_item(self):
 item = SimpleItem.objects.defer('value').first()  # same with
 `only` instead of `defer`
 item.pk = None
 item._state.adding = True  # doesn't seem to change anything
 return item

 def test_save(self):
 self._get_item().save()  # ValueError: Cannot force an update in
 save() with no primary key.

 def test_save_force_insert(self):
 self._get_item().save(force_insert=True)  #
 SimpleItem.DoesNotExist

 def test_bulk_create(self):
 SimpleItem.objects.bulk_create([self._get_item()])  #
 SimpleItem.DoesNotExist
 }}}

 Possibly related: #27419, #28019.

-- 
Ticket URL: 
Django 
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 on the web visit 
https://groups.google.com/d/msgid/django-updates/050.e66392a705d7e9175ab19ed220a350be%40djangoproject.com.