#25298: Forbid QuerySet filtering by a related field that expects a single value
when multiple values are returned
-------------------------------------+-------------------------------------
     Reporter:  timgraham            |                    Owner:  Y3K
         Type:                       |                   Status:  assigned
  Cleanup/optimization               |
    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 Y3K):

 Replying to [comment:3 akaariai]:
 > Notably
 `Foo.objects.filter(related_model__exact=RelatedModel.objects.values('pk'))`
 should work when the RelatedModel query returns just a single row. This is
 a completely valid query, equivalent to:
 > {{{
 > SELECT ... FROM foo WHERE related_model_id = (SELECT id FROM
 relatedmodel)
 > }}}
 > If the subquery returns one or zero rows, this query should work on all
 backends.

 Hello akaariai.

 Don't you think it would be better to forbid such cases as well? If by any
 means the subquery returns more than one row it'll fail. I think we can
 save many user errors preventing this before it happens, if we raise an
 exception whenever a subquery that may return multiple rows is used the
 users will know and prevent said cases.

 Open to comments and suggestions, of course.

--
Ticket URL: <https://code.djangoproject.com/ticket/25298#comment:6>
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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/067.88e5594eb9f353d8c694867291120a9c%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to