Django DRF: ModelViewSet: Как показать некоторые свойства внешнего ключа вместе с id

## MODELS

class Animal(models.Model):
    name = models.CharField(max_length=200, unique=True)
    number_of_legs = models.CharField(max_length=200, unique=True)
    ... (there are several other properties here)

class Breed(models.Model):
    name = models.CharField(
        max_length=200,
        unique=True,
    )
    animal = models.ForeignKey(
        "Animal",
        on_delete=models.CASCADE,
    )
    ... (there are several other properties here)

class Pet(models.Model):
    name = models.CharField(max_length=200)
    breed = models.ForeignKey(
        "Breed",
        on_delete=models.CASCADE,
    )



### SERIALIZERS


class AnimalSerializer(serializers.ModelSerializer):
    class Meta:
        model = Animal
        fields = "__all__"


class BreedSerializer(serializers.ModelSerializer):
    class Meta:
        model = Breed
        fields = "__all__"


class PetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Pet
        fields = "__all__"


## ModelViewset

class PetViewSet(viewsets.ModelViewSet):
    queryset = Pet.objects.all()
    serializer_class = PetSerializer

Когда я пытаюсь получить список домашних животных, я хочу получить что-то вроде этого

[{
    "id": 1,
    "name": "rexy",
    "breed": 2, <-- foriengkey id
    --> HERE I ALSO WANT 
    "breed name"  <-- I dont want other properties of breed
    "animal name" <-- I dont want other properties of animal
}]

Вы можете добавить источник на поле сериализатора, чтобы указать ему, где найти значение из экземпляра модели:

class PetSerializer(serializers.ModelSerializer):
    breed_name = serializers.CharField(source='breed.name', read_only=True)
    animal_name = serializers.CharField(source='breed.animal.name', read_only=True)

    class Meta:
        model = Pet
        fields = "__all__"
Вернуться на верх