Ну игра это слишком сложная штука. Если бы вы писали блог какой-то, можно сразу представить стандартную структуру. В игре же не все так однозначно. Может у вас ограниченный размер рюкзака, или в нем ячейки, или зелья могу быть на 50% выпиты и просто количество хранить нельзя, одетые шмотки не занимают место в рюкзаке.
Мой вариант позволяет легко работать со всеми объектами, типа: backpack.items.all(). Все зелья вроде как будет: backpack.items.exclude(potion=None) или backpack.items.exclude(potionpk=None), точно не помню. Если с дополнительными данными: backpack.backpackitem_set.exclude(itempotion=None). Но я точно не помню все возможности наследования.