У меня есть следующая структура наследования модели:
class ModelA(models.Model):
# some fields
class Type(models.Model):
# fields common to all subtypes
# ...
# and a ForeignKey relationship
modelA = models.ForeignKey(ModelA)
class Subtype1(Type):
# fields specific for this type
class Subtype2(Type):
# fields specific for this type
Итак, как вы можете видеть.У меня есть эта структура наследования.Пока что я могу перечислить все Type
экземпляров (независимо от их подтипов) сразу через следующее представление на основе классов в views.py
:
class TypeList(generics.ListAPIView):
serializer_class = TypeSerializer
def get_queryset(self):
pk = self.kwargs['pk']
modelA = ModelA.objects.get(id=pk)
return modelA.type_set.all()
Итак, что я делаю: представление получает идентификатор (упакованный в URL) экземпляра ModelA
, чтобы он мог получить правильный экземпляр ModelA
из базы данных.Позже мы возвращаем все Type
экземпляров ModelA
(потому что через отношение иностранных ключей он может получить доступ к своему набору Type
объектов).Это работает очень хорошо.
Но я также хочу запросить типы подкласса.Как я могу это сделать?Когда я заменяю оператор возврата из предыдущего кода на return modelA.subtype1_set.all()
, я получаю следующую ошибку:
AttributeError в / modelAs / 1 / объект 'ModelA' не имеет атрибута 'subtype1_set'
Это понятно для меня, потому что нет никакой связи между ModelA
и Subtype1
.Итак, как я могу запросить экземпляры подкласса?