Я хочу хэшировать свой пароль, но некоторые поля не должны быть обязательными.
В django валидация при регистрации, я не хочу проверять некоторые поля, потому что они не обязательны, но если я создаю пользователя с другой страницы, то мне нужны эти поля, поэтому как сделать не обязательными некоторые поля
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "username", "password" ,"first_name", "last_name","email", "User_Type","url","sign_up_count", "facebook", "twitter", "linkedin", "instagram", "telegram", "discord", "snapchat"]
def create(self, validated_data):
user = User(
email=validated_data['email'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
username=validated_data['email'],
User_Type=validated_data['User_Type'],
facebook=validated_data['facebook'],
twitter=validated_data['twitter'],
linkedin=validated_data['linkedin'],
instagram=validated_data['instagram'],
telegram=validated_data['telegram'],
discord=validated_data['discord'],
snapchat=validated_data['snapchat'],
)
user.set_password(validated_data['password'])
user.save()
return user
Когда я регистрирую аккаунт, мне не нужны facebook, telegram и прочее..., но если я создаю пользователя с другой страницы, то мне это нужно. Так как же установить не требуемые поля для validate
?В настоящее время у вас есть один сериализатор: UserSerializer, и этот сериализатор требует все поля, такие как linkedin и т.д.
Вам следует оставить все как есть или даже переименовать его в WebsiteRegistrationUserSerializer, чтобы было более понятно, для чего используется этот сериализатор.
Следующим шагом будет объявление AdminRegistrationUserSerializer следующим образом:
class AdminRegistrationUserSerializer (serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "username", "password" ,"first_name", "last_name","email", "User_Type", <all_fields_you_want_to_include>]
def create(self, validated_data):
password = validated_data.pop('password')
user = User(**validated_data)
user.set_password(password)
user.save()
return user
После этого вы можете изменить сериализатор в CreateUserByAdmin на AdminRegistrationUserSerializer