该字段名按照外键正反向来确定,根据外键对应关系来确定many是否设置为True,many默认为False
class GoodsSerializer(ModelSerializer):
people = PeopleSerializer()
class Meta:
model = Goods
fields = "__all__"
有人说万一我的people表还有一层外键,该怎样,那就还要定义一个外键的serializer类,然后把people的外键改写。效果如下:
序列化器类显示枚举类,处理多对多,一对多都要重新改写一下序列化字段,自定义返回值SerializerMethodField类型,它会自动调用钩子函数get_xxx,跟字段对应的钩子方法。
class UserInfoSerializer(ModelSerializer):
# 枚举剔出来定义,这样才能显示数据而不是1,2,3
user_type = serializers.CharField(source='get_user_type_display')
# 多对多,也剔出来,用source做不到那个力度,因为进去还要遍历。只能用自定义的函数。
roles = serializers.SerializerMethodField()
# 这个users_query就是你在视图实例化(使用)这个类时,传入给instance的值
def get_roles(self, users_query):
# 这儿自定义返回信息,是一个列表生成式做遍历
return [{'id':role.id,'title':role.title} for role in users_query.roles.all()]
class Meta:
model = UserInfo
fields = ['username','password','user_type','roles','group']
# 给某个字段增加或修改参数
extra_kwargs = {'group':{'min_length':6},}