Django Rest框架:如何指定序列化器来使用不同的字段来创建、更新和获取



我对序列化器有一个疑问,到目前为止我还不能解决它。我用下面的例子来解释这个疑问:

我有一个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_onlyread_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