#33512: Creating a child instance with a parent containing
DateTimeField(auto_add_now=True) raises IntegrityError.
-------------------------------------+-------------------------------------
     Reporter:  Eriks K              |                    Owner:  nobody
         Type:  Bug                  |                   Status:  closed
    Component:  Database layer       |                  Version:  4.0
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:  duplicate
     Keywords:  auto_add_now         |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

 * status:  new => closed
 * resolution:   => duplicate


Old description:

> Description:
> When creating Model object which inherits from other Model which has
> `DateTimeField` with `auto_add_now=True` and passing `parent_ptr_id`
> value, then Django tries to update base Model by setting the auto_now_add
> field to NUL (although the field is null=False)
>
> Expected result:
> ChildModel instance created with a link to ParentModel.
>
> Code examples:
> `models.py`
> {{{
> class ParentModel(models.Model):
>     created = models.DateTimeField(auto_now_add=True)
>     modified = models.DateTimeField(auto_now=True)
>

> class ChildModel(SomeBaseModel):
>     some_field = models.CharField(max_length=12)
> }}}
>
> `manage.py shell`
> {{{
> from app.models import ParentModel, ChildModel
> parent_object = ParentModel.objects.create()  # OK
> ChildModel.objects.create()  # OK
> ChildModel.objects.create(parentmodel_ptr=parent_object)  #
> IntegrityError
> }}}
>
> Actual result:
> Django tries to update ParentModel's `created` with NULL
> {{{
> UPDATE "app_parentmodel" SET "created" = NULL, "modified" = ? WHERE
> "app_parentmodel"."id" = ?
> }}}
> And raises
> {{{
> django.db.utils.IntegrityError: NOT NULL constraint failed:
> app_parentmodel.created
> }}}
>

> Noticed in Django 2.2, reproduced in 3.2 and 4.0. with both Postgres and
> SQlite database backends.
> [https://github.com/eeriks/django-demo Demo project on GitHub] to
> reproduce bug.

New description:

 Description:
 When creating Model object which inherits from other Model which has
 `DateTimeField` with `auto_add_now=True` and passing `parent_ptr_id`
 value, then Django tries to update base Model by setting the auto_now_add
 field to NUL (although the field is null=False)

 Expected result:
 ChildModel instance created with a link to ParentModel.

 Code examples:
 `models.py`
 {{{
 class ParentModel(models.Model):
     created = models.DateTimeField(auto_now_add=True)
     modified = models.DateTimeField(auto_now=True)


 class ChildModel(ParentModel):
     some_field = models.CharField(max_length=12)
 }}}

 `manage.py shell`
 {{{
 from app.models import ParentModel, ChildModel
 parent_object = ParentModel.objects.create()  # OK
 ChildModel.objects.create()  # OK
 ChildModel.objects.create(parentmodel_ptr=parent_object)  # IntegrityError
 }}}

 Actual result:
 Django tries to update ParentModel's `created` with NULL
 {{{
 UPDATE "app_parentmodel" SET "created" = NULL, "modified" = ? WHERE
 "app_parentmodel"."id" = ?
 }}}
 And raises
 {{{
 django.db.utils.IntegrityError: NOT NULL constraint failed:
 app_parentmodel.created
 }}}


 Noticed in Django 2.2, reproduced in 3.2 and 4.0. with both Postgres and
 SQlite database backends.
 [https://github.com/eeriks/django-demo Demo project on GitHub] to
 reproduce bug.

--

Comment:

 Thanks for the report! It looks like a different scenario for the same
 issue as described in #24539.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33512#comment:1>
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 on the web visit 
https://groups.google.com/d/msgid/django-updates/064.4c1bbee35013ee4ba4d9280d10d27bc2%40djangoproject.com.

Reply via email to