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__"