ModelSerializer需要解决的两个问题

ModelSerializer需要解决的两个问题

class BookModelSerializer(serializers.ModelSerializer):
    authors_id = serializers.ListField(write_only=True,source='authors')
    publish_id = serializers.IntegerField(write_only=True)
    class Meta:
        model = models.Book
        fields = ['title','price','pub_date','publish','authors','authors_id','publish_id']
        depth = 1
        extra_kwargs = {
            "publish": {"read_only": True},  # 避免直接改写
            "authors": {"read_only": True}
        }


  1. 当我们进行多对多表关系进行操作的时候,因为某个字段不属于指定model,他是write_only需要用户传进来,但是我们不能进行save,因为ModelSerializer是基于Model,这个字段在Model里面没有响应,我们需要在序列化字段的时候加进来,
  2. 还有一个问题当我们保存的时候,authors_id是保存不了的,我们需要authors_id = serializers.ListField(write_only=True,source='authors')source他model里面的字段,这样他保存的时候就和model里面的一致了

登陆注册问题

再写登录注册的时候用ModelSerializer,要重写username字段,因为在数据库中他是unique,所以要重写覆盖

class UserModelSerializer(serializers.ModelSerializer):
    username = serializers.CharField()

    class Meta:
        model = User
        fields = ['username', 'password']
posted @ 2020-07-19 23:33  小子,你摊上事了  阅读(250)  评论(0编辑  收藏  举报