Drf 序列化 ModelSerializer跨表取數據

1、對於OneToOne、Foreignkey、choices字段可以使用source取出相關信息:

class CourseSerializer(serializers.ModelSerializer):
    # choices字段
    degree = serializers.CharField(source='get_degree_display')
    # ForeignKey字段
    teacher = serializers.CharField(source='teacher.name')
    class Meta:
        model = Course
        fields = '__all__'

2、對於ManyToMany字段,例如:

class BookSerializers(serializers.ModelSerializer):
    authors  = serializers.SerializerMethodField()
    publisher = serializers.CharField(source='publisher.title')
    class Meta:
        model = Book
        fields = "__all__"  # 可選擇顯示字段
        # exclude = ['price',]  # 排除字段

    def get_authors(self,obj):
        query_set = obj.authors.all()
        return [{'name':obj.name} for obj in query_set]


------

{
    "id": 2,
    "authors": [
        {
            "name": "姓名"
        }
    ],
    "publisher": "出版社",
    "title": "標題",
    "pub_date": "2019-04-01",
    "word_count": 22,
    "price": 32
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章