IntegrityError в /api/users/profile/update
Я пытаюсь реализовать функциональность обновления пользователя, но всякий раз, когда я пытаюсь обновить пользователя, я получаю ошибку IntegrityError, говорящую: UNIQUE constraint failed: auth_user.username
Вот что у меня есть на данный момент:
Вот мои сериализаторы для пользователя:
class UserSerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField(read_only=True)
    _id = serializers.SerializerMethodField(read_only=True)
    isAdmin = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = User
        fields = ['id', '_id', 'username', 'email', 'name', 'isAdmin']
    def get__id(self, obj):
        return obj.id
    def get_isAdmin(self, obj):
        return obj.is_staff
    def get_name(self, obj):
        name = obj.first_name
        if name == '':
            name = obj.email
        return name
class UserSerializerWithToken(UserSerializer):
    token = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = User
        fields = ['id', '_id', 'username', 'email', 'name', 'isAdmin', 'token']
    def get_token(self, obj):
        token = RefreshToken.for_user(obj)
        return str(token.access_token)
Вот мой метод просмотра:
@api_view(['PUT'])
@permission_classes([IsAuthenticated])
def updateUserProfile(request):
    user = request.user
    serializer = UserSerializerWithToken(user, many=False)
    data = request.data
    user.first_name = data['name']
    user.username = data['email']
    user.email = data['email']
    if data['password'] != '':
        user.password = make_password(data['password'])
    user.save()
    return Response(serializer.data)
А это мое действие пользователя:
export const updateUserProfile = (user) => async (dispatch, getState) => {
  try {
    dispatch({
      type: USER_UPDATE_PROFILE_REQUEST,
    });
    const {
      userLogin: { userInfo },
    } = getState();
    const config = {
      headers: {
        "Content-type": "application/json",
        Authorization: `Bearer ${userInfo.access}`,
      },
    };
    const { data } = await axios.put(`/api/users/profile/update`, user, config);
    dispatch({
      type: USER_UPDATE_PROFILE_SUCCESS,
      payload: data,
    });
    dispatch({
      type: USER_LOGIN_SUCCESS,
      payload: data,
    });
    localStorage.setItem("userInfo", JSON.stringify(data));
  } catch (error) {
    dispatch({
      type: USER_UPDATE_PROFILE_FAIL,
      payload:
        error.response && error.response.data.detail
          ? error.response.data.detail
          : error.message,
    });
  }
};
При проверке Google Chrome говорится, что ошибка возникает в строке 142 (в const {data} в функции updateUserProfile). Я читал, что эта ошибка может произойти, когда вы пытаетесь создать нового пользователя с теми же учетными данными (имя пользователя или email), но в моем случае я посылаю запрос put и не могу понять, почему я получаю эту ошибку.
Почему вы не можете добавить функцию full_clean для проверки перед сохранением,
def save(self, *args, **kwargs):
        self.full_clean()
        return super(UserModel, self).save(*args, **kwargs)
если вы используете модель пользователя по умолчанию, то можете использовать эту проверку в обработчике сигнала перед сохранением, чтобы он любезно завершался в случае проверки уникального ограничения.
@receiver(pre_save)
def pre_save_handler(sender, instance, *args, **kwargs):
    instance.full_clean()