Я хочу хэшировать свой пароль, но некоторые поля не должны быть обязательными.

В 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

Вернуться на верх