话不多说,先看代码:
models.py
from django.db import models
class Product(models.Model):
name = models.CharField()
class ProductCategory(models.Model):
category = models.ForeignKey(Product)
正向嵌套显示外键字段:
serializers.py
from rest_framework import serializers
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class ProductCategorySerializer(serializers.ModelSerializer):
category = ProductSerializer()
class Meta:
model = ProductCategory
fields = '__all__'
反向嵌套外键:
from rest_framework import serializers
class ProductCategorySerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategory
fields = '__all__'
class ProductSerializer(serializers.ModelSerializer):
productcategory_set = ProductCategorySerializer(many=True)
class Meta:
model = Product
fields = '__all__'
# 注意:这时添加了一个参数 many=True ,表示将要序列化多个对象
# drf的ModelSerializer类似于ModelForm,Serializer类似于Form
# 看另一个例子,在view.py中有如下定义:
# def post_list(request):
# posts = Post.objects.filter(status='normal')
# post_serializers = PostSerializer(posts, many=True)
# return Response(post_serializers.data)
Tips: 在django中如果子表外键中没有设置related_name参数,那么主表在访问子表属性时使用 X_set的形式访问子表属性(其中X为子表数据表的表名,使用英文小写,使用形式:主表.子表_set(),详情可自行百度 “django的反向查询” )