Django Rest Framework : как определить сериализатор для использования различных полей для создания, обновления и получения
У меня есть сомнения по поводу сериализаторов и пока что я не смог их решить. Я объясняю сомнения на следующем примере:
У меня есть модель User, и эта модель имеет следующие атрибуты: username, password, first_name, last_name, age, gender. У меня также есть сериализатор, который называется UserSerializer. UserSerializer должен делать следующее:
При вставке информации в базу данных UserSerializer должен учитывать только поля: username, password, first_name, last_name.
При извлечении информации из базы данных UserSerializer должен учитывать только поля: возраст, пол.
При обновлении информации из базы данных, UserSerializer должен учитывать только поля: пароль.
Мое решение:
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