#25467: Excluding an object with no ID excludes everything.
-------------------------------------+-------------------------------------
     Reporter:  skorokithakis        |                    Owner:
                                     |  HuffAndPuff
         Type:  Bug                  |                   Status:  assigned
    Component:  Database layer       |                  Version:  1.8
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by carljm):

 Some more musings on this:

 Our strongest existing precedent for the meaning of `None` in an ORM
 comparison is that `__exact=None` is equivalent to `__isnull=True`, or SQL
 `IS NULL`.

 If we accept that as a consistent semantic, it would imply that we should
 fix `__in=[val, None]` generally (not just for related fields) to remove
 the `None` from the `in` list and add an `OR IS NULL` clause alongside it.
 This seems better than the current behavior to me, but perhaps low
 priority.

 It would also imply that `.exclude(related_field=unsaved_instance)` would
 exclude records where the `related_field` FK is `NULL`. This is subtly
 different from the OPs requested behavior, which is that such an `exclude`
 would never exclude anything. I find the latter behavior (to consider
 `unsaved_instance` to match nothing, rather than matching NULL) more
 intuitive. Which means we  either a) use different semantics for instance-
 with-None-pk in comparisons than we use for `None` in comparisons
 otherwise, b) accept a less-intuitive behavior for instance-with-None-pk
 for consistency with use of `None` elsewhere, or c) declare that the
 choice between (a) and (b) is too ambiguous (that I was wrong earlier when
 I said "there's no ambiguity"), and therefore we should just raise an
 exception after all.

 I think I would put these in preference order (a) (c) (b), but could live
 with any of them; and complexity-of-implementation could easily sway me to
 prefer (c) over (a).

--
Ticket URL: <https://code.djangoproject.com/ticket/25467#comment:9>
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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/071.5502e38aa89d75e222a80365ade3858d%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to