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