#30627: In multi-table inheritance, querying with invalid pk raises different
exception depending on the inheritance level
-------------------------------------+-------------------------------------
               Reporter:  Antonis    |          Owner:  nobody
  Christofides                       |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  2.2
  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          |
-------------------------------------+-------------------------------------
 **Steps to reproduce**:

 1. Create these models:
 {{{
 class Animal(models.Model):
     pass

 class Mammal(Animal):
     pass

 class Cat(Mammal):
     pass
 }}}

 2. Query by pk, using a string instead of an integer:
 {{{
 Animal.objects.get(pk="hello")
 Mammal.objects.get(pk="hello")
 Cat.objects.get(pk="hello")
 }}}

 **Result**: Querying `Animal` and `Mammal` raises a `ValueError` with the
 message "invalid literal for int() with base 10: 'hello'". This appears to
 be the desired behavior. However, querying `Cat` constructs an SQL query
 and attempts to run it, usually resulting in 'DataError: invalid input
 syntax for integer: "hello"'.

 **Expected result**: In all cases the same exception should have been
 raised.

 A practical problem caused by this is that if you give my app a wrong URL
 like `/api/stations/hello/` (instead of e.g. `/api/stations/25/`), it
 results in an internal server error when it should have returned 404. The
 reason is that django-rest-framework catches `ValueError` but does not
 catch `DataError`.

 I'm also attaching a file that you can merely run and it demonstrates the
 problem.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30627>
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/049.4bb6c6bd43c57e16124ad5277bb7ee93%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to