drf序列化类中PrimaryKeyRelatedField字段的使用

PrimaryKeyRelatedField

该字段可以用来映射外键字段,在反序列化的时候,不管与当前序列化类所对应的模型表有没有关联,前端只需要传一个包含多个主键值值的列表,然后传入参数queryset对应一个模型表,那么就会在序列化类里生成该表对应主键的该对象放在列表内。在序列化的时候,就只能是有外键字段才行,无关联的字段会报错。

多用在外键不在该表的时候(反向查询),或者两表没有任何关系,只是需要另一张表的对象来进行数据的校验和处理,这样直接写一个字段,来接收与之关联表的主键,让PrimaryKeyRelatedField来转化成对应的对象

class OrderSerializer(serializers.ModelSerializer):
    # PrimaryKeyRelatedField的用法是把前端传来的列表通过指定的表按主键来取出对象的对象放进列表中
    # 如果是多个数据一定要写many=True 不然会报错
    courses_list = serializers.PrimaryKeyRelatedField(queryset=Course.objects.all(), many=True)

image

class BookModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'title', 'price', 'author', 'publish', 'publish_name']
	# 单个数据就不需要many=True 并且前端传的数据就不需要是列表,直接是单独的主键值
    publish = serializers.PrimaryKeyRelatedField(queryset=Publish.objects.all(), write_only=True)

image

posted @ 2022-05-01 16:50  zong涵  阅读(1248)  评论(3编辑  收藏  举报