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}
}
- 当我们进行多对多表关系进行操作的时候,因为某个字段不属于指定model,他是write_only需要用户传进来,但是我们不能进行save,因为ModelSerializer是基于Model,这个字段在Model里面没有响应,我们需要在序列化字段的时候加进来,
- 还有一个问题当我们保存的时候,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']