#32660: Endless loop upon delete
-------------------------------------+-------------------------------------
               Reporter:  kr         |          Owner:  nobody
                   Type:             |         Status:  new
  Uncategorized                      |
              Component:  Database   |        Version:  3.1
  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          |
-------------------------------------+-------------------------------------
 I have three models whereas one has a custom __init__ method:


 {{{
 class Foo(models.Model):
     my_foo = models.CharField(max_length=1000)


 class Bar(models.Model):
     bar1 = models.CharField(max_length=1000, default="")
     bar2 = models.BooleanField(default=False)
     foo = models.ForeignKey(Foo, on_delete=models.CASCADE)

     def __init__(self, *args, **kwargs):
         super(Bar, self).__init__(*args, **kwargs)
         print("check")
         self._original_bar1 = self.bar1
         self._original_bar2 = self.bar2


 class Baz(models.Model):
     bar = models.ForeignKey(Bar, on_delete=models.CASCADE)
 }}}


 Creating a Foo object and a corresponding Bar object (via the admin
 interface) works fine.
 **However, when I delete the Foo object, this results in an endless loop
 of the __init__ method.**

 If I rewrite the models slightly as


 {{{
 from django.db import models


 class Foo(models.Model):
     my_foo = models.CharField(max_length=1000)


 class AbstractBar2(models.Model):
     bar2 = models.BooleanField(default=False)

     def __init__(self, *args, **kwargs):
         super(AbstractBar2, self).__init__(*args, **kwargs)
         print("check")
         self._original_bar2 = self.bar2

     class Meta:
         abstract = True


 class AbstractBar1(models.Model):
     bar1 = models.CharField(max_length=1000, default="")

     def __init__(self, *args, **kwargs):
         super(AbstractBar1, self).__init__(*args, **kwargs)
         print("check")
         self._original_bar1 = self.bar1

     class Meta:
         abstract = True


 class Bar(AbstractBar1, AbstractBar2):
     foo = models.ForeignKey(Foo, on_delete=models.CASCADE)


 class Baz(models.Model):
     bar = models.ForeignKey(Bar, on_delete=models.CASCADE)
 }}}

 it errors out on


 {{{
 Fatal Python error: _Py_CheckRecursiveCall: Cannot recover from stack
 overflow.
 Python runtime state: initialized

 Current thread 0x000035d0 (most recent call first):
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\fields\__init__.py", line 807 in get_prep_value
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\fields\__init__.py", line 1770 in get_prep_value
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\lookups.py", line 76 in get_prep_lookup
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\lookups.py", line 24 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\sql\query.py", line 1165 in build_lookup
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\sql\query.py", line 1319 in build_filter
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\sql\query.py", line 1377 in _add_q
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\sql\query.py", line 1358 in add_q
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 969 in
 _filter_or_exclude_inplace
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 962 in _filter_or_exclude
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 942 in filter
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\manager.py", line 85 in manager_method
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 623 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 26 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 14 in __init__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 24 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 26 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 14 in __init__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 24 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 26 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 14 in __init__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 24 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 26 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 14 in __init__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 24 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 26 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 14 in __init__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 24 in __init__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 513 in from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 71 in __iter__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 1308 in _fetch_all
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 269 in __len__
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query.py", line 425 in get
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\base.py", line 635 in refresh_from_db
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\db\models\query_utils.py", line 149 in __get__
   File "C:\Users\name\PycharmProjects\djangoTest\foobar\models.py", line
 26 in __init__
   ...

 Thread 0x00000a60 (most recent call first):
   File
 "C:\Users\name\AppData\Local\Programs\Python\Python39\lib\selectors.py",
 line 315 in _select
   File
 "C:\Users\name\AppData\Local\Programs\Python\Python39\lib\selectors.py",
 line 324 in select
   File
 "C:\Users\name\AppData\Local\Programs\Python\Python39\lib\socketserver.py",
 line 232 in serve_forever
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\servers\basehttp.py", line 216 in run
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\commands\runserver.py", line 139 in
 inner_run
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\utils\autoreload.py", line 53 in wrapper
   File
 "C:\Users\name\AppData\Local\Programs\Python\Python39\lib\threading.py",
 line 888 in run
   File
 "C:\Users\name\AppData\Local\Programs\Python\Python39\lib\threading.py",
 line 950 in _bootstrap_inner
   File
 "C:\Users\name\AppData\Local\Programs\Python\Python39\lib\threading.py",
 line 908 in _bootstrap

 Thread 0x00000c7c (most recent call first):
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\utils\autoreload.py", line 374 in tick
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\utils\autoreload.py", line 324 in run_loop
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\utils\autoreload.py", line 318 in run
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\utils\autoreload.py", line 603 in start_django
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\utils\autoreload.py", line 618 in run_with_reloader
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\commands\runserver.py", line 103 in run
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\commands\runserver.py", line 96 in handle
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\base.py", line 371 in execute
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\commands\runserver.py", line 61 in execute
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\base.py", line 330 in run_from_argv
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\__init__.py", line 395 in execute
   File "C:\Users\name\PycharmProjects\global39\djangoTest\lib\site-
 packages\django\core\management\__init__.py", line 401 in
 execute_from_command_line
   File "C:\Users\name\PycharmProjects\djangoTest\manage.py", line 18 in
 main
   File "C:\Users\name\PycharmProjects\djangoTest\manage.py", line 22 in
 <module>

 Process finished with exit code -1
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/32660>
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/045.b377cebc6f21f4c0d1297a156e6a7a5c%40djangoproject.com.

Reply via email to