#18416: Query fails when SimpleLazyObject evaluates to None
-------------------------------------+-------------------------------------
Reporter: bouke | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 1.4
(models, ORM) | Resolution: wontfix
Severity: Normal | Triage Stage:
Keywords: | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by dougvanhorn):
I just bumped into this bug. I'm not going to muck with the status, but I
wanted to document my thoughts in case anyone else wants to take up the
cause on this (I've found it to be a tedious, political process).
The code that raises the exception is this (it's found in most of the
Field types):
{{{
#!python
def get_prep_value(self, value):
if value is None:
return None
return int(value)
}}}
It's the `value is None` that causes the problem.
[http://stackoverflow.com/questions/15399024/does-the-is-operator-use-a
-magic-method-in-python It's an identity test].
If the intent of the if-test is return `None` when the supplied value
equates to `None`, then the if-test should be re-written as `value ==
None`, which would test for equality. The equality test is slower,
though, so you'll likely find argument against using it in this section of
the code. Oddly built objects with __eq__ overloaded might also find
trouble.
So there may not be much to do here, leaving the burden on the user to
figure out what's going on. But I wanted to add some documentation to
this bug for future reference.
----
For what it's worth, I ran into this problem with the following code:
{{{
#!python
try:
agreement = Agreement.objects.get(user=request.user)
except Agreement.DoesNotExist, e:
agreement = Agreement(user=request.user)
}}}
I ended up wrapping the view in the `login_required` method, which makes
the `.user` evaluate to something, preventing the bug. But as stated by
**bouke**, the stack is not very helpful.
--
Ticket URL: <https://code.djangoproject.com/ticket/18416#comment:3>
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 post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.