简体   繁体   English

Django DRF:ModelViewSet:如何显示一些外键属性以及 id

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM