[英]Django DRF: ModelViewSet: How to show some foreign key properties along with 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
When I am trying to GET the list of pets I want something like this当我试图获取宠物列表时,我想要这样的东西
[{
"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
}]
You can add a source on a serializer field to tell it where to find the value from the model instance:您可以在序列化程序字段上添加一个源,以告诉它从 model 实例中找到值的位置:
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__"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.