#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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/064.4c1bbee35013ee4ba4d9280d10d27bc2%40djangoproject.com.

Reply via email to