我对序列化器有一个疑问,到目前为止我还不能解决它。我用下面的例子来解释这个疑问:
我有一个User模型,该模型具有以下属性:用户名、密码、first_name、last_name、年龄、性别。我还有一个序列化器,叫做UserSerializer。UserSerializer应该执行以下操作:
-
当向数据库插入信息时,UserSerializer应该只考虑字段:username, password, first_name, last_name。
-
当从数据库中检索信息时,UserSerializer应该只考虑字段:age, gender。
-
当更新数据库信息时,UserSerializer应该只考虑以下字段:password
我的解决方案:
class UserSerializer:
class UserCreateSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username', 'password', 'first_name', 'last_name']
class UserGetSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['age', 'gender']
class UserUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['password']
问题:
问题是:是否有办法将三个序列化器综合为一个,或者这个问题的最佳解决方案是什么?
非常感谢。
在序列化器字段中使用write_only
和read_only
参数指定用于创建和检索
class UserSerializer(serializers.ModelSerializer):
username = serializers.CharField(write_only=True, required=False)
password = serializers.CharField(write_only=True)
first_name = serializers.CharField(write_only=True, required=False)
last_name = serializers.CharField(write_only=True, required=False)
age = serializers.IntegerField(read_only=True)
gender = serializers.CharField(read_only=True)
class Meta:
model = User
fields = ['username', 'password', 'first_name', 'last_name', 'age', 'gender']
如果任何字段是可选的,那么您可以添加required=False