image.png
    image.png
    该字段名按照外键正反向来确定,根据外键对应关系来确定many是否设置为True,many默认为False

    1. class GoodsSerializer(ModelSerializer):
    2. people = PeopleSerializer()
    3. class Meta:
    4. model = Goods
    5. fields = "__all__"

    image.png
    有人说万一我的people表还有一层外键,该怎样,那就还要定义一个外键的serializer类,然后把people的外键改写。效果如下:
    image.png
    序列化器类显示枚举类,处理多对多,一对多都要重新改写一下序列化字段,自定义返回值SerializerMethodField类型,它会自动调用钩子函数get_xxx,跟字段对应的钩子方法。

    1. class UserInfoSerializer(ModelSerializer):
    2. # 枚举剔出来定义,这样才能显示数据而不是1,2,3
    3. user_type = serializers.CharField(source='get_user_type_display')
    4. # 多对多,也剔出来,用source做不到那个力度,因为进去还要遍历。只能用自定义的函数。
    5. roles = serializers.SerializerMethodField()
    6. # 这个users_query就是你在视图实例化(使用)这个类时,传入给instance的值
    7. def get_roles(self, users_query):
    8. # 这儿自定义返回信息,是一个列表生成式做遍历
    9. return [{'id':role.id,'title':role.title} for role in users_query.roles.all()]
    10. class Meta:
    11. model = UserInfo
    12. fields = ['username','password','user_type','roles','group']
    13. # 给某个字段增加或修改参数
    14. extra_kwargs = {'group':{'min_length':6},}