Как ответить с дочерним объектом на основе его родительского идентификатора? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть родительский класс и дочерний класс, вот так:

class Animal(models.Model):
    age = models.IntegerField()

class Bird(Animal)
    wingSpan = models.DecimalField()

Вот вид для получения птиц:

class BirdViewSet(viewsets.ModelViewSet):
    queryset = Bird.objects.all()
    serializer_class = BirdSerializer

А вот сериализатор:

class BirdSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Bird
        fields = ['age', 'wingSpan']

В базе данных jan go соответствующим образом создал поле animal_prt_id в таблице birds, чтобы эта пара представления / сериализатора знала, где найти возраст, который сопоставлен с родительским классом Animal.

Как создать пару вид / сериализатор, которая делает противоположное, то есть она получает идентификатор животного и отвечает полной птицей (или любым другим подклассом животного, который у меня может быть)?

1 Ответ

1 голос
/ 09 апреля 2020

Существует полезный пакет с именем django -model-utils , который обеспечивает InheritanceManager logi c.

TLDR: после настройки пакета ваш код будет выглядеть примерно так

bird = Animal.objects.filter(pk=animal_id).select_subclasses("bird")

...