This is a quirk of the way inheritance works in the ORM; when you ask
for a QuerySet of Item instances, you get Item instances. Not
Item-but-really-some-other-subclass instances, but actual genuine Item
instances, whose methods are the methods defined on the Item class.
This happens because inheritance, under the hood, is simply a
one-to-one relation between a pair of objects; one is the "parent" and
one is the "child". And they really are *two* objects, not one, so to
get the methods of the "child" you have to be working with the "child"
object (which is accessible as described in the documentation).
They're also pulling from two different tables.
The longer answer is that inheritance in a model hierarchy -- because
it's dealing with the impedance mismatch of needing to map onto a
relational database -- doesn't behave the way inheritance behaves in
other situations, and generally it should be a last, rather than a
first, resort when you're modelling your data (unless you're just
doing things like using an abstract model class to avoid repetitive
field declarations -- note that an abstract model class cannot be
directly instantiated, so switching your setup to use one still
wouldn't get the behavior you're aiming for).
--
"Bureaucrat Conrad, you are technically correct -- the best kind of correct."