#16898: Throwing an exception out of a custom field (or any QuerySet._results_iter
callable) results in a bad _results_cache
-------------------------------------+-------------------------------------
Reporter: jdunck | Owner: nobody
Type: Bug | Status: new
Milestone: | Component: Database
Version: 1.3 | layer (models, ORM)
Keywords: | Severity: Normal
Has patch: 0 | Triage Stage:
Needs tests: 0 | Unreviewed
Easy pickings: 0 | Needs documentation: 0
| Patch needs improvement: 0
| UI/UX: 0
-------------------------------------+-------------------------------------
Using a custom field which breaks:
{{{
class BrokenField(DateTimeField):
__metaclass__ = SubfieldBase
def to_python(self, value):
raise TypeError("Nope.")
}}}
Assume some rows exist.
If you then create AModel using that field:
{{{
class AModel(Model):
f = BrokenField(null=True)
}}}
And you then try to query on it:
{{{
>>> qs = AModel.objects.all()
>>> qs
[]
>>> qs._result_cache is None
True
}}}
You get an empty (or truncated) results list.
I think the underlying exception should instead be raised. If it only
breaks sometimes, the results will be shorter, a very hard-to-find bug.
--
Ticket URL: <https://code.djangoproject.com/ticket/16898>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.