[Django] #32660: Endless loop upon delete

33 views
Skip to first unread message

Django

unread,
Apr 16, 2021, 5:38:17 PM4/16/21
to django-...@googlegroups.com
#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.

Django

unread,
Apr 16, 2021, 8:14:14 PM4/16/21
to django-...@googlegroups.com
#32660: Endless loop upon delete
-------------------------------------+-------------------------------------
Reporter: kr | Owner: nobody
Type: Uncategorized | Status: new
Component: Database layer | Version: 3.1
(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
-------------------------------------+-------------------------------------

Comment (by Tim Graham):

You should explain why Django is at fault and not your custom
`__init__()` method, and ideally propose some solution.

--
Ticket URL: <https://code.djangoproject.com/ticket/32660#comment:1>

Django

unread,
Apr 17, 2021, 1:11:03 PM4/17/21
to django-...@googlegroups.com
#32660: Endless loop upon delete
-------------------------------------+-------------------------------------
Reporter: kr | Owner: exec-life
Type: Uncategorized | Status: assigned

Component: Database layer | Version: 3.1
(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 exec-life):

* owner: nobody => exec-life
* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/32660#comment:2>

Django

unread,
Apr 18, 2021, 5:51:03 AM4/18/21
to django-...@googlegroups.com
#32660: Endless loop upon delete
-------------------------------------+-------------------------------------
Reporter: kr | Owner: exec-life
Type: Uncategorized | Status: assigned
Component: Database layer | Version: 3.1
(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
-------------------------------------+-------------------------------------

Comment (by kr):

Replying to [comment:1 Tim Graham]:


> You should explain why Django is at fault and not your custom
`__init__()` method, and ideally propose some solution.

The only thing my custom `__init__()` method does is retrieving model
attributes and saving them to local variables. I don't see why this should
be illegal to do, especially because it works except when I try to perform
the delete operations.
In my opinion, the code is simple enough that a "justification" why the
`__init__()` method is not at fault is not needed.
Obviously, django runs into an endless loop with the model initializations
/ fetching the model from the db. This clearly seems to be a fault of the
django framework. Agreed?

--
Ticket URL: <https://code.djangoproject.com/ticket/32660#comment:3>

Django

unread,
Apr 18, 2021, 5:52:29 AM4/18/21
to django-...@googlegroups.com
#32660: Endless loop upon delete
-------------------------------------+-------------------------------------
Reporter: kr | Owner: exec-life
Type: Uncategorized | Status: assigned
Component: Database layer | Version: 3.1
(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
-------------------------------------+-------------------------------------
Description changed by kr:

Old description:

> {{{
> from django.db import models
>

New description:

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


{{{
from django.db import models

it errors out on

--

--
Ticket URL: <https://code.djangoproject.com/ticket/32660#comment:4>

Django

unread,
Apr 18, 2021, 9:02:42 PM4/18/21
to django-...@googlegroups.com
#32660: Endless loop upon delete
-------------------------------------+-------------------------------------
Reporter: kr | Owner: exec-life
Type: Uncategorized | Status: assigned
Component: Database layer | Version: 3.1
(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
-------------------------------------+-------------------------------------

Comment (by Simon Charette):

Your code will break as soon as fields are deferred which is something
model deletion does to instantiate model instances while reducing memory
and CPU usage during cascade deletion.

In other code your code breaks the `Bar.objects.defer('bar1)` pattern
because accessing fields triggers loading which
[https://docs.djangoproject.com/en/3.2/ref/models/instances/#customizing-
model-loading is covered by the docs].

This is detailed a bit in #31475 but I suggest you avoid overriding
`__init__` and favour `from_db_value` and rely on `fields` instead of if
you cannot do `self.__dict__.get('bar1')` to bypass deferred attributes
descriptors.

--
Ticket URL: <https://code.djangoproject.com/ticket/32660#comment:5>

Django

unread,
Apr 18, 2021, 9:42:56 PM4/18/21
to django-...@googlegroups.com
#32660: Endless loop upon delete
-------------------------------------+-------------------------------------
Reporter: kr | Owner: exec-life
Type: Bug | Status: closed

Component: Database layer | Version: 3.1
(models, ORM) |
Severity: Normal | Resolution: invalid
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 Tim Graham):

* status: assigned => closed
* type: Uncategorized => Bug
* resolution: => invalid


--
Ticket URL: <https://code.djangoproject.com/ticket/32660#comment:6>

Reply all
Reply to author
Forward
0 new messages